Intereting Posts
Как перемещать маркер вдоль полилинии с помощью карты google После того, как приложение простаивало в течение нескольких часов, оно выходит из режима onResume, поскольку ресурсы отсутствуют. Как решить через onTrimMemory В чем разница между спящим режимом и режимом глубокого сна? Список зарезервированных слов в Android Как переопределить выбор текста по умолчанию в Android-браузере os 4.1+? Почему рекомендуется не сохранять фрагмент с пользовательским интерфейсом? Android Как сделать вызов, который включает «#» или «p» в циферблате? Android: исключение из памяти в галерее Создать учетную запись электронной почты из типа существующих служб учетной записи SwipeRefreshLayout отключить анимацию перетаскивания Очень простой код, но получил ошибку «Активность была уничтожена» при использовании фрагмента Шифрование видеофайлов? Почему мой Android UI действует неуловимо, когда я пытаюсь выбрать текст? Отрегулируйте громкость записи микрофона Android Permission, required = "false", fail

Как получить представление о элементе 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); } }