`
Small嗳TT
  • 浏览: 11341 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

自定义的一个Adapter

阅读更多
引用

今天实现了一个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写这些东西,写的不好还请包涵,也希望说大家能够从中得到点启发,更希望大家能给点建议,共同进步!!
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics