引用
今天实现了一个Adapter,通过自定义的XML文件内容来初始化,感觉还行,分享下,也请各位大虾给点意见~~
代码太多了,故只贴一小部分,请见谅~~
public class UIAdapter extends ArrayAdapter<Tag>
引用
反射机制需用到的方法名初始化:
/**
* 用于设置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();
}
}
引用
不同的控件的各自的设置,里面的具体实现我省略了:
//------------一下是各种具体控件类型的具体属性设置,通过反射机制来调用----------------------
//注意:方法一定要为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){...}
引用
子类通过重写这个方法来设置具体的监听
protected void bindListener(View view, Tag item){
}
引用
其中:Tag为自己定义的一个保存Xml信息的类,通过Xml的读取实例化,其属性如下:
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
引用
XmlConstant中则是存储了各种Xml字段的常量。
通过构建这个Adapter,我可以很轻松的实现GridView、ListView等的设置。我现在用在自己写demo时主界面的设置(GridView),可以很轻松的通过Xml配置主界面的菜单,通过点击跳转到正在编写的模块界面中。
今天主要碰到的一个问题是ListView中的ImageButton优先级大于ListView,导致ListView的setOnItemClickListener被屏蔽掉了。网上找了下资料,发现只要将模板Xml中的Layout设置:android:descendantFocusability="blocksDescendants",以及里面的ImageButton设置:android:focusable="false"即可。
第一次来JavaEEn写这些东西,写的不好还请包涵,也希望说大家能够从中得到点启发,更希望大家能给点建议,共同进步!!
分享到:
相关推荐
自定义ViewGroup+Adapter
Android自定义adapter的listview代码
这个是我写的一个自定义Adapter适配器,用来绑定数据到ListView上。我写的代码非常简单易懂
我们可以为GridView添加自定义的Adapter
Android之自定义Adapter的ListView
自定义Adapter,主要用来展示Adapter使用setAdapter(adapter)程序闪退、崩溃问题的原因
如何去定义一个Adapter继承BaseAdapter
ListView中使用自定义Adapter及时更新数据
根据CSDN鸿洋大神的博客自定义Adapter改写而成。可适应大多数的ListView和GridView的适配器需求~~
安卓listview自定义adapter包括demo和一些其他自定义绑定的代码
listview 自定义adapter的例子demo
为便于学习自定义的Adapter,本案例的界面未进行美化,功能已经实现,对于其中的getView(int position,View view ,ViewGroup vg)做了数据的填充操作。本案例功能及其简单,只涉及ListView中自定义适配器,没有对...
自定义adapter checkbox选中处理,处理多选问题
简单的listview自定义适配器的使用方法,注释很清晰,也有对应的博文介绍
主要为大家详细介绍了Android自定义viewgroup,使用adapter适配数据,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
价值1积分,基于ArrayAdapter的spinner适配器,含有详细注释,初学Android,请谨慎下载
Android listview例子, 采用自定义Adapter:包含了Button控件
ListView与Adapter是Android一组很常用的组合,本篇博客旨在探究它们的各种应用场景
Android 组合控件,用自定义方式实现,非简单重写adapter。同时包含了点击事件的响应。