想写一个列表界面,但因为列表的内容比较多,不想在Java文件中一项一项列出来;也因为有规律可以循,比如第一天,第二天,第三天,等等叠加的数据;索性就自己继承一个ListAdapter来做。
其实很简单,写好构造方法,重写getCount()、getView()和getViewTypeCount()方法就可以直观的显示出来了。
private class IndexAdapter implements ListAdapter {
Context mContext;
LayoutInflater mInflater;
public IndexAdapter(Context context) {
this.mContext = context;
mInflater = LayoutInflater.from(context);
}
public int getCount() {
// TODO Auto-generated method stub
return INDEX_NUM;
}
public int getViewTypeCount() {
// TODO Auto-generated method stub
return 1;//你的item项里有几种view就返回几
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
TextView item;
convertView = mInflater.inflate(R.layout.index_item, null);
item = (TextView)convertView.findViewById(R.id.item);
item.setText(xxx);
return convertView;
}
......//其它自动重载的方法
}
为了处理每个列表项的点击事件呢,又给这个ListActivity重写了onListItemClick方法。可惜,重载完之后,怎么都不起作用,加上log一看,根本没有走。郁闷坏了,网上到处找原因,能找到的方法只有,将列表项中能自动获得焦点的view设置为不能获得焦点,比如checkbox或button等view,即:
checkbox.setFocusableInTouchMode(false);
checkbox.setFocusable(false);
可是,依然无果,何况我的列表项中只有一个TextView,也不会自动获得焦点,只好返回去再仔细看代码,发现了问题所在。
public boolean areAllItemsEnabled() {
// TODO Auto-generated method stub
return true;
}
public boolean isEnabled(int arg0) {
// TODO Auto-generated method stub
return true;
}
ListAdapter的这两个方法,如果是自动重载,它们返回的都是false,一定要改为true,这样一改,问题搞定。
自定义列表适配器解决列表项点击事件问题
本文详细介绍了如何通过继承ListAdapter来创建自定义列表适配器,并解决列表项点击事件不起作用的问题。通过重写关键方法,如getCount(), getView(), getViewTypeCount()等,实现列表项的正确显示。最后,通过修改ListAdapter的两个方法areAllItemsEnabled()和isEnabled()的返回值,解决了点击事件无法触发的问题。
1357

被折叠的 条评论
为什么被折叠?



