我有一个简单的Strings
数组,我在水平ListView
中显示ArrayAdapter
。 我想要做的是:当用户从ListView
中选择一个项目时,使该项目无法点击并更改该项目的背景颜色。也许就像一个“灰暗”的外观。我正在考虑创建自定义Adapter
并覆盖isEnabled(int position)
方法,但我不知道如何解决这个问题。任何建议,建议或帮助将不胜感激,谢谢!
答案 0 :(得分: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;
}
希望有所帮助!
答案 1 :(得分: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());
答案 2 :(得分:0)
使用setEnabled(bool)
属性:
yourlistview.setEnabled(false);
答案 3 :(得分:0)
不确定它是否有效
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
// your code
view.setBackgroundColor(Color.BLUE);
view.setEnabled(false);
}