定制adapter
adapter负责:
- 创建必要的视图对象
- 用模型层数据填充视图对性爱那个
- 将准备好的视图对象返回给ListView
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| ... 内部类 private class CrimeAdapter extends ArrayAdapter<Crime>{ public CrimeAdapter(ArrayList<Crime> crimes){ super(getActivity(),0,crimes); }
@Override public View getView(int position, View convertView, ViewGroup parent) { if(convertView==null){ convertView=getActivity() .getLayoutInflater() .inflate(R.layout.list_item_crime,null); }
Crime c=(Crime)(getListAdapter()).getItem(position);
TextView titleTextView=(TextView)convertView.findViewById(R.id.list_item_crime_title_TextView); TextView dateTextView=(TextView)convertView.findViewById(R.id.list_item_crime_date_TextView); CheckBox solvedCheckBox=(CheckBox)convertView.findViewById(R.id.list_item_crime_isSolved_CheckBox);
solvedCheckBox.setChecked(c.isSolved()); return convertView; } }
...
|
注: 由于CheckBox默认是可聚焦的,也就是点击列表向会被解读为切换CheckBox的状态,因而无法触发onListItemClick()方法。解决方法:
1 2 3 4 5 6 7
| <CheckBox android:id="@+id/list_item_crime_isSolved_CheckBox" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:gravity="center" android:focusable="false"/>
|