我有一个简单的 Strings
数组,我使用 ArrayAdapter
在水平 ListView
中显示它。 我想要做的是:当用户从 ListView
中选择一个项目时,使该项目不可点击并更改该项目的背景颜色。也许就像一个“变灰”的样子。我正在研究创建自定义 Adapter
并覆盖 isEnabled(int position)
方法,但我不知道我将如何去做。非常感谢任何意见、建议或帮助!
最佳答案
I was looking into creating a custom Adapter and overriding the
isEnabled(int position)
method but I don't know how I would go about this.
这很容易做到。我建议使用 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; }
希望对您有所帮助!
关于java - 单击后如何禁用 ListView 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15885928/