[英]setChoiceMode(ListView.CHOICE_MODE_SINGLE) How to cancel selection?
我有一个ListView使用:
setChoiceMode(ListView.CHOICE_MODE_SINGLE)
因此,当用户单击列表项时,它将显示为已选中。 这很好,并自动选择项目。
注意:用户单击列表项时的标准操作是它更新另一个片段中的某些内容。
但是列表中有一些我不想选择的列表项。 而不是更新内容我显示一个对话框。 麻烦的是,当用户摆脱了对话框时,该项仍然被标记为已选中,这是我不想要的。 实际上我根本不希望它被选中,并保持选择先前选择的列表项。
有没有办法以编程方式选择列表项(因此您可以选择是否选择它),同时使用CHOICE_MODE_SINGLE,因为这样可以确保当前只选择列表中的1个项目?
看看这段代码:
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position == 0) {
mListView.setItemChecked(position, false);
}
}
});
如果选择第一项,则取消选择列表项。 您也可以保存最后正确的位置
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position == 0) {
mListView.setItemChecked(mLastCorrectPosition, true);
}
else {
mLastCorrectPosition = position;
}
}
});
编辑
完整的活动
public class MainActivity extends Activity {
private ListView mListView;
private String[] mData = new String[] { "xxx", "yyy", "zzz", "aaa" };
private BaseAdapter mAdapter;
private int mLastCorrectPosition = -1;
private int mButtonPosition = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = (ListView) findViewById(R.id.list_view);
mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
mAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_activated_1, mData);
mListView.setAdapter(mAdapter);
mListView.setSelector(new ColorDrawable(0));
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
if (position == mButtonPosition) {
if (mLastCorrectPosition != -1) {
mListView.setItemChecked(mLastCorrectPosition, true);
}
else {
mListView.setItemChecked(mButtonPosition, false);
}
// here show dialog
}
else {
mLastCorrectPosition = position;
// here refresh fragment
}
}
});
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.