自定义的一个Adapter

[quote]
今天实现了一个Adapter,通过自定义的XML文件内容来初始化,感觉还行,分享下,也请各位大虾给点意见~~ :D
代码太多了,故只贴一小部分,请见谅~~
[/quote]

public class UIAdapter extends ArrayAdapter<Tag>

[quote][color=red]反射机制需用到的方法名初始化:[/color][/quote]


/**
* 用于设置getItem方法中的反射的方法名itemType--------->method
*/
private final static void initMethodMap(){
methodMap.put(XmlConstant.ITEM_TYPE_TEXT, "initTextView");
methodMap.put(XmlConstant.ITEM_TYPE_BUTTON, "initButton");
methodMap.put(XmlConstant.ITEM_TYPE_IMAGE, "initImageView");
methodMap.put(XmlConstant.ITEM_TYPE_RADIOBUTTON, "initRadioButton");
methodMap.put(XmlConstant.ITEM_TYPE_IMAGEBUTTON, "initImageButton");
methodMap.put(XmlConstant.ITEM_TYPE_CHECKBOX, "initCheckBox");
}



private void initItem(RelativeLayout rLayout, Tag item){
try {
View view = initUniform(rLayout, item);
if(view == null){
return;
}
//通过反射机制执行相应的方法
String itemType = item.getAttributes().get(XmlConstant.ATTR_TYPE);
Method method = this.getClass().getMethod(methodMap.get(itemType),
new Class[]{View.class, Tag.class});
method.invoke(this, new Object[]{view, item});
} catch (Exception e) {
e.printStackTrace();
}
}

[quote]
不同的控件的各自的设置,里面的具体实现我省略了:
[/quote]


//------------一下是各种具体控件类型的具体属性设置,通过反射机制来调用----------------------
//注意:方法一定要为public,否则将找不到方法
public void initTextView(View view, Tag item){...}
public void initButton(View view, Tag item){...}
public void initImageView(View view, Tag item){...}
public void initRadioButton(View view, Tag item){...}
public void initImageButton(View view, Tag item){...}
public void initCheckBox(View view, Tag item){...}



[quote]
子类通过重写这个方法来设置具体的监听
[/quote]



protected void bindListener(View view, Tag item){
}

[quote]
其中:Tag为自己定义的一个保存Xml信息的类,通过Xml的读取实例化,其属性如下:
[/quote]

protected String tagName;
protected Tag parent;
protected HashMap<String, List<Tag>> children;//通过tagName--->名为tagName的子Tag的List
protected HashMap<String, String> attributes;//属性名--->属性值
protected String text;
protected int depth = 0;//Tag的深度,root的深度为1

[quote]
XmlConstant中则是存储了各种Xml字段的常量。
通过构建这个Adapter,我可以很轻松的实现GridView、ListView等的设置。我现在用在自己写demo时主界面的设置(GridView),可以很轻松的通过Xml配置主界面的菜单,通过点击跳转到正在编写的模块界面中。

今天主要碰到的一个问题是ListView中的ImageButton优先级大于ListView,导致ListView的setOnItemClickListener被屏蔽掉了。网上找了下资料,发现只要将模板Xml中的Layout设置:android:descendantFocusability="blocksDescendants",以及里面的ImageButton设置:android:focusable="false"即可。

第一次来JavaEEn写这些东西,写的不好还请包涵,也希望说大家能够从中得到点启发,更希望大家能给点建议,共同进步!!
[/quote]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值