我试着点击 我试图实现一个使用状态选择器的列表。 但是在使用textView.setChecked(textView.isChecked()!)时遇到问题;
" isChecked"没有正确
例如,尝试选择数字0或倒数第二个位置,也选择最后一个,这是不正常的。
我放了一张图片。
列表位于适配器内,我认为适配器会重置下面项目的位置,这是我能找到他的唯一解释。
在我的ListActivity中:
setListAdapter(new ListMultiplesAdapter(this,R.layout.test12, values,listview));
final ListView listView = getListView();
listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
我的适配器:
public ListMultiplesAdapter(Context mContext, int layoutResourceId, String[] data, ListView lv) {
super(mContext, layoutResourceId, data);
this.layoutResourceId = layoutResourceId;
this.mContext = mContext;
this.data = data;
this.lv = lv;
}
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
SparseBooleanArray sparseBooleanArray = lv.getCheckedItemPositions();
System.out.println("Clicked Position := "+position +" Value: "+sparseBooleanArray.get(position));
CheckedTextView textView = (CheckedTextView)view.findViewById(R.id.check);
textView.setChecked(!textView.isChecked());
}
});
答案 0 :(得分:0)
这是BaseAdapter实现的一个示例。
public class DemoListAdapter extends BaseAdapter {
...
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ListItem item = mList.get(position);
ViewHolder holder;
// If it is a new item, create it otherwise use the existing item previously created in
// this method.
if (convertView == null) {
LayoutInflater li = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = li.inflate(R.layout.list_item, null);
holder = new ViewHolder();
// This is where the text is originally set
holder.mListItemText = (TextView) convertView.findViewById(R.id.list_item_title);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
// use the existing data from the item that already exists
holder.mListItemText.setText(item.getItemText());
return convertView;
}
private static class ViewHolder {
public TextView mListItemText;
}
...
...
}
然后滚动时,您可以重复使用列表中的现有项目。
答案 1 :(得分:0)
首先,您应该使用自定义列表视图e.g.,以便自定义列表适配器的功能。你可以参考android博客。
您可以使用SparceBooleanArray来保持选中的项目位置,并且在getView()
方法中使用此数据来使用适配器的位置来检查或取消选中项目。简而言之,您必须在列表视图中保留已检查和未检查项目的所有位置,并使用视图来重用视图。