Как получить представление о элементе ListView?

У меня есть два ListViews (A и B) с элементами того же типа (созданный мной класс)

Когда я нажимаю на элемент из A, он добавляет этот объект в B, и если я снова нажимаю его, он удаляет его. Только когда выбран элемент, я меняю его фон, используя view.setBackgroundColor (myColor).

Я хочу, чтобы удалить элемент из списка B (он работает), но я хочу также сбросить цвет фона. Я не могу понять, как получить представление об этом элементе, который я удаляю.

Есть идеи?

Solutions Collecting From Web of "Как получить представление о элементе ListView?"

Нет никакой гарантии, что какой-либо конкретный элемент ListView даже будет иметь представление в любой момент времени. Если элемент в настоящее время находится вне экрана, возможно, у него нет представления. Поскольку конкретный элемент может не иметь представления, может не иметь смысла пытаться получить представление элемента.

Кроме того, из-за того, как ListView создает и повторно использует представления, вы увидите некоторые нечетные, нежелательные эффекты, если вы просто измените представления напрямую. Когда пользователь прокручивает список, элементы, которые становятся видимыми, будут в конечном итоге иметь те же фоны, что и другие элементы, которые попали за пределы видимой части.

Я не знаю, лучший ли способ для реализации ваших функций, потому что я не знаю, сколько стоит перестройка списка после изменения. Вот (возможно наивный) способ сделать это:

  1. Добавьте еще один логический элемент в объект данных, например isInSecondList .
  2. Переопределите getView() в адаптере. В getView() установите фон как нормальным, так и подсвеченным в зависимости от значения isInSecondList .
  3. Когда элемент добавляется или удаляется из второго списка, обновите объект данных, чтобы отразить это изменение, а затем вызовите notifyDataSetChanged() .
 int position = 0; listview.setItemChecked(position, true); View wantedView = adapter.getView(position, null, listview); 

Вот что я сделал

 private View oldSelection; @Override public void onItemClick(AdapterView<?> arg0, View view, int position, long arg3) { highlightSelectdListItem(position); } public void highlightSelectdListItem(int position) { clearPreviousSelection(); View newsItemView = mGridVIew.getChildAt(position); oldSelection = newsItemView; newsItemView.setBackgroundColor(Color.GRAY); } public void clearPreviousSelection() { if (oldSelection != null) { oldSelection.setBackgroundColor(Color.TRANSPARENT); } }