Android CheckedTextView位置错误
我试着点击一下 我正在尝试实现一个使用状态选择器的列表。 但是我在使用textView.setChecked(textView.isChecked()!)时遇到问题 “已检查”不正确 例如,尝试选择数字0或倒数第二个位置,最后一个也被选中,这是不正常的 我放了一张图片 列表在适配器中,我认为适配器重置了下面项目的位置,这是我能找到他的唯一解释 在我的列表活动中:Android CheckedTextView位置错误,android,listview,checkedtextview,Android,Listview,Checkedtextview,我试着点击一下 我正在尝试实现一个使用状态选择器的列表。 但是我在使用textView.setChecked(textView.isChecked()!)时遇到问题 “已检查”不正确 例如,尝试选择数字0或倒数第二个位置,最后一个也被选中,这是不正常的 我放了一张图片 列表在适配器中,我认为适配器重置了下面项目的位置,这是我能找到他的唯一解释 在我的列表活动中: setListAdapter(new ListMultiplesAdapter(this,R.layout.test12, val
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());
}
});
公共ListMultipleAdapter(上下文mContext、int-layoutResourceId、字符串[]数据、ListView lv){
super(mContext、layoutResourceId、data);
this.layoutResourceId=layoutResourceId;
this.mContext=mContext;
这个数据=数据;
this.lv=lv;
}
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
SparseBooleanArray SparseBooleanArray=lv.getCheckedItemPositions();
System.out.println(“单击的位置:=”+Position+“值:”+sparseBooleanArray.get(位置));
CheckedTextView textView=(CheckedTextView)view.findViewById(R.id.check);
textView.setChecked(!textView.isChecked());
}
});
这是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;
}
...
...
}
然后,当您滚动时,您可以重新使用列表中的现有项。首先,您应该使用自定义列表视图,以便自定义列表适配器的功能。你可以参考安卓博客
您可以使用来保持选中项目的位置,并在
getView()
方法中使用此数据使用适配器的位置来选中或取消选中项目。简而言之,您必须在listview中保留选中项和未选中项的所有位置,并使用viewholder重复使用视图。为此,您必须保存复选框的位置。您需要实现一个适配器,在项目从屏幕上滚出时不会重新创建项目。是的,我使用的是listview,我怎么不能再创造,我更新了我的代码“setListAdapter”。您必须覆盖适配器类中getView方法的实现。您必须创建Holder问题是我使用“ArrayAdapter”第二步将listview我的“ListActivity”。我的代码很好,当“lv.setOnItemClickListener”在我的ListActivity上运行时,它可以工作,但不要将它放在这里,因为检查不起作用,并且在我的适配器中存在checksArrayAdapter extends BaseAdapter的问题。只需在对象中存储一个选中/未选中的标志。如果未选中TextViews,则认为问题不是我的问题。您需要将onClickListener附加到列表中的每个视图。这是一些教程,它们现在有点老了,但仍然有不同场景的很好示例。