我的問題與我的簡單應用程序。它使用一個ListView已到: - 按下時,它是在視圖模式 打開一個新的活動 - 高亮顯示所選項目時,它在編輯模式Android ListView項目選擇和重置
我做了以下內容:
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"));
}
但這只是如果列表視圖中的所有項目都可見做工精細。 我試過在適配器上實現這個沒有成功...
任何建議?
謝謝!
編輯
好賈瓦德回答後,我只是想出瞭如何做「getView」方法的工作。所以這是我用過的解決方案:
我宣佈包含所選項目的ArrayList:
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方法的ovverride:
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();
謝謝:)人
改變適配器類'getView(...)'方法而不是改變'listview'項的背景顏色。 – Rustam