想写一个列表界面,但因为列表的内容比较多,不想在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,这样一改,问题搞定。