У меня проблема с моим простым приложением. Он использует ListView, который к: - открыть новую активность при нажатии и это в режиме просмотра - выделить выбранный элемент, когда он находится на режиме редактированияЭлемент списка ListView 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"));
}
Но это работает отлично, только если все элементы в ListView не видны. Я попытался реализовать это на адаптере без успеха ...
Любое предложение?
Спасибо!
EDIT
Ok после Джавад ответа я просто понял, как же "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();
}
});
Это ovverride метода GetView:
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 (...)'. – Rustam