【发布时间】:2015-09-09 00:54:11
【问题描述】:
我的简单应用程序有问题。它使用一个列表视图,它必须: - 按下时打开一个新活动,它处于查看模式 - 在编辑模式下突出显示选定的项目
我正在做以下事情:
ListView lv = (ListView)findViewById(R.id.categoryListView);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String entry = (String) parent.getItemAtPosition(position);
if (_editMode)
view.setBackgroundColor(Color.parseColor("#5B5B5B"));
else
{
Intent intent = new Intent(MainActivity.this, CategoryActivity.class);
intent.putExtra("CATEGORY", entry);
startActivity(intent);
}
}
});
然后我希望当我打开查看模式时,必须取消选择所有项目,我这样做:
for (int i = 0; i < lv.getAdapter().getCount(); i++)
{
lv.getChildAt(i).setBackgroundColor(Color.parseColor("#FFFFFF"));
}
但这只有在列表视图中的所有项目都可见时才能正常工作。 我试过在适配器上实现这个但没有成功......
有什么建议吗?
谢谢!
编辑
好吧,在 Jawad 回答之后,我才弄清楚“getView”方法是如何工作的。所以这是我使用的解决方案:
我声明了一个包含所选项目的数组列表:
ArrayList<String> itemSelected = new ArrayList<String>();
这是 ListView onItemClick 监听器(您可以在其中选择和取消选择项目):
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
String entry = (String) parent.getItemAtPosition(position);
if (itemSelected.contains(entry))
{
itemSelected.remove(entry);
}
else
{
itemSelected.add(entry);
}
((ArrayAdapter<String>)lv.getAdapter()).notifyDataSetChanged();
}
});
这是getView方法的oververride:
itmList.setAdapter(new ArrayAdapter<String>(this,R.layout.list_black_text,R.id.list_content, itmStrList){
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
if (convertView != null)
{
if (itemSelected.contains(itmList.getAdapter().getItem(position))) {
convertView.setBackgroundColor(Color.RED);
} else {
convertView.setBackgroundColor(Color.parseColor("#5B5B5B"));
}
}
return super.getView(position, convertView, parent);
}
});
这是取消选择所有项目的方法:
itemSelected.clear();
((ArrayAdapter<String>)lv.getAdapter()).notifyDataSetChanged();
谢谢你 :)
【问题讨论】:
-
而不是更改
listview项目的背景颜色,此处更改适配器类getView(...)方法。