我有一个简单的Strings
数组,我用ArrayAdapter
以横向ListView
显示。 我想要做的是:当用户从ListView
中选择一个项目时,使该项目不可点击并更改该项目的背景颜色。也许就像一个“灰色”的外观。我正在考虑创建一个自定义Adapter
并覆盖isEnabled(int position)
方法,但我不知道如何去做这件事。任何意见,建议,或帮助将不胜感激谢谢!如何在点击后禁用ListView项目?
回答
我一直在寻找到创建自定义适配器和重写
isEnabled(int position)
方法,但我不知道我怎么会去了解这一点。
这很容易做到。我建议SparseBooleanArray以跟踪效率启用的项目:
public class MyAdapter extends ArrayAdapter<String> {
private SparseBooleanArray enabledItems = new SparseBooleanArray();
public MyAdapter(Context context, int textViewResourceId, List<String> objects) {
super(context, textViewResourceId, objects);
}
@Override
public boolean areAllItemsEnabled() {
return false;
}
@Override
public boolean isEnabled(int position) {
return enabledItems.get(position, true);
}
public void toggleItem(int position) {
boolean state = enabledItems.get(position, true);
enabledItems.put(position, !state);
}
}
的Eclipse的自动完成功能都必须工作,但这里有一些快速提示:
- 必须覆盖
areAllItemsEnabled()
与isEnabled()
沿 - 我设计
toggle()
由一个onItemClickListener()
使用。如果你愿意,你只需要调用adapter.toggle(position)
改变行的外观(比默认情况下启用和禁用更多)简单地覆盖
getView()
。不要忘了覆盖这两种情况:public View getView(int position, View convertView, ViewGroup parent) { convertView = super.getView(position, convertView, parent); if(!isEnabled(position)) { /* change to disabled appearance */ } else { /* restore default appearance */ } return convertView; }
希望帮助!
使用setEnabled(bool)
属性:
yourlistview.setEnabled(false);
这是否会禁止整个ListView的?因为我只需要它在ListView中禁用单击的项目。 – chRyNaN 2013-04-08 18:21:31
@AndroidStudent Yup ... – NullPointer 2013-04-08 18:24:21
通位置适配器类,当你在列表项点击的setSelectedIndex的
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
adapter.setSelectedIndex(position);
}
add方法适配器类
public void setSelectedIndex(int ind)
{
selectedIndex = ind;
notifyDataSetChanged();
}
现在检查这个列表视图,如果相同的现在的位置,然后启用并在getView me中禁用值方法
if(selectedIndex!= -1 && position == selectedIndex)
{
holder.tv.setBackgroundColor(Color.BLACK);
}
else
{
holder.tv.setBackgroundColor(selectedColor);
}
holder.tv.setText("" + (position + 1) + " " + testList.get(position).getTestText());
及以上sam 回答也不错 – QuokMoon 2013-04-08 18:25:33
不知道它是否会工作或没有
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// your code
view.setBackgroundColor(Color.BLUE);
view.setEnabled(false);
}
如果每行都是一个单独的View,但ListViews会循环使用以提高效率,所以这不会像您期望的那样运行。 – Sam 2013-04-08 18:29:15
- 1. Listview项目滚动后只能点击
- 2. 如何在点击ListView项目后显示位图图像
- 3. 如何让按钮点击ListView项目?
- 4. itemClickListener。如何点击listView中的项目?
- 5. 项目右点击ListView WPF
- 6. UWP ListView项目点击
- 7. 如何禁用长的ListView项单击
- 8. 如何在listview中点击listview项目按钮启动相机?
- 9. 点击listview中的项目后如何关注google标记?
- 10. 禁用listview点击或触摸滚动项目android
- 11. ListView项目点击Metro应用程序?
- 12. 在ListView中解释项目点击
- 13. ListView项目点击不工作在Tabhost
- 14. android-在ListView中处理项目点击
- 15. 如何在用户点击后禁用可点击元素?
- 16. 在点击后禁用div
- 17. 如何在Android中单击ListView项目
- 18. 如何在点击时在ListView中动画项目?
- 19. 如何在按下和点击后在ListView上设置项目的背景?
- 20. 为什么ListView项目在滚动后变得不可点击
- 21. 如何改变ListView的项目颜色焦点和点击
- 22. Android ListView如何获得点击不在项目上
- 23. 如何使ListView中的项目在点击时向上移动
- 24. 如何获取在ListView中点击的项目的ID?
- 25. 如何在Listview的OnClickListener中获取点击项目的位置?
- 26. AngularJS如何禁用按钮后点击
- 27. 如何在点击ListView项目后将其更改为与布局不同?
- 28. 如何在用户点击listview项目后显示广告,但不是Android中的每个项目?
- 29. Adapter ListView项目点击事件
- 30. 获取点击ListView项目编号
自定义列表适配器的声音正是你需要的 – brendosthoughts 2013-04-08 18:10:09