我有一个简单的数组Strings
,我ListView
用ArrayAdapter
. 我要做的是:当用户从 中选择一个项目时ListView
,使该项目不可点击并更改该项目的背景颜色。也许就像一个“灰色”的外观。我正在考虑创建一个自定义Adapter
并覆盖该isEnabled(int position)
方法,但我不知道该怎么做。任何建议、建议或帮助将不胜感激,谢谢!
问问题
4680 次
4 回答
9
我正在考虑创建一个自定义适配器并覆盖该
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 的 AutoComplete 特性完成了这项工作,但这里有一些简短的说明:
- 您必须
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; }
希望有帮助!
于 2013-04-08T18:22:36.220 回答
2
单击列表项时将位置传递给适配器类
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
adapter.setSelectedIndex(position);
}
将 setSelectedIndex 方法添加到适配器类
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());
于 2013-04-08T18:24:17.370 回答
0
使用setEnabled(bool)
属性:
yourlistview.setEnabled(false);
于 2013-04-08T18:13:54.657 回答
0
不确定它是否会起作用
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// your code
view.setBackgroundColor(Color.BLUE);
view.setEnabled(false);
}
于 2013-04-08T18:27:09.477 回答