- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 ListView,它使用:
setChoiceMode(ListView.CHOICE_MODE_SINGLE)
因此,当用户单击列表项时,它会显示为选中状态。这工作正常并自动选择项目。
注意:当用户点击列表项时,标准操作是更新另一个 fragment 中的一些内容。
但是列表中有些列表项我不想选中。我没有更新内容,而是显示了一个对话框。麻烦的是,当用户摆脱对话框时,项目仍然被标记为选中,这是我不想要的。事实上,我根本不希望它被选中,并保持之前选中的列表项处于选中状态。
有没有办法以编程方式选择一个列表项(这样您就可以选择是否将其设置为选中),同时使用 CHOICE_MODE_SINGLE 因为这确保当前仅选中列表中的一项?
最佳答案
看这段代码:
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;
}
}
});
编辑
完整 Activity
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
}
}
});
}
}
关于android - setChoiceMode(ListView.CHOICE_MODE_SINGLE) 如何取消选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16484015/
这是一个针对 Android 4.1+ 的应用。我希望 ListView 处于 Activity 状态。我正在其他应用程序中使用代码,这些代码可以正常工作。不确定这里有什么区别(除了 API 版本更高
此代码在 Java 中运行良好,但在 Kotlin 中运行不佳: import android.widget.ListView myListView = getListView(....) myLis
我有一个 ListView,它使用: setChoiceMode(ListView.CHOICE_MODE_SINGLE) 因此,当用户单击列表项时,它会显示为选中状态。这工作正常并自动选择项目。 注
这里是我所说的怪异的意思: 通常需要按 2 次才能正确更改项目的背景颜色。 当列表被更改时,Android 似乎没有正确地使 ListView 无效,因为被检查的重新使用的 View 在新项目上有被检
我是一名优秀的程序员,十分优秀!