Как отключить элемент ListView после его нажатия?

У меня есть простой массив Strings который я показывал в горизонтальном ListView с ArrayAdapter . Я хочу сделать следующее: когда пользователь выбирает элемент из ListView , сделайте этот элемент не кликабельным и измените цвет фона этого элемента. Может быть, как «затушеванный» взгляд на него. Я занимался созданием пользовательского Adapter и переопределением метода isEnabled(int position) но я не знаю, как бы я это сделал. Любые советы, предложения или помощь будут с благодарностью благодарны!

Я занимался созданием пользовательского адаптера и переопределением метода isEnabled(int position) но я не знаю, как бы я это сделал.

Это довольно легко сделать. Я рекомендую SparseBooleanArray отслеживать задействованные элементы для повышения эффективности:

 public class MyAdapter extends ArrayAdapter<String> { private SparseBooleanArray enabledItems = new SparseBooleanArray(); public MyAdapter(Context context, int textViewResourceId, List<String> objects) { super(context, textViewResourceId, objects); } @Override public boolean areAllItemsEnabled() { return false; } @Override public boolean isEnabled(int position) { return enabledItems.get(position, true); } public void toggleItem(int position) { boolean state = enabledItems.get(position, true); enabledItems.put(position, !state); } } 

Функция автозаполнения Eclipse сделала работу, но вот несколько быстрых заметок:

  • Вы должны переопределить areAllItemsEnabled() вместе с isEnabled()
  • Я разработал toggle() который будет использоваться с помощью onItemClickListener() вам нужно будет только вызвать adapter.toggle(position)
  • Если вы хотите изменить внешний вид строки (больше, чем это делает включение и отключение по умолчанию), просто переопределите getView() . Не забудьте обойти оба случая:

     public View getView(int position, View convertView, ViewGroup parent) { convertView = super.getView(position, convertView, parent); if(!isEnabled(position)) { /* change to disabled appearance */ } else { /* restore default appearance */ } return convertView; } 

    Надеюсь, это поможет!

Перейти к классу адаптера при нажатии на элемент списка

  @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { adapter.setSelectedIndex(position); } 

Добавить метод setSelectedIndex в класс адаптера

  public void setSelectedIndex(int ind) { selectedIndex = ind; notifyDataSetChanged(); } 

Теперь проверьте положение этого списка, если оно включено, а затем включите и отключите значение в методе getView me

  if(selectedIndex!= -1 && position == selectedIndex) { holder.tv.setBackgroundColor(Color.BLACK); } else { holder.tv.setBackgroundColor(selectedColor); } holder.tv.setText("" + (position + 1) + " " + testList.get(position).getTestText()); 

Ссылка здесь

Используйте setEnabled(bool) :

 yourlistview.setEnabled(false); 

Не уверен, будет ли это работать или нет

  public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // your code view.setBackgroundColor(Color.BLUE); view.setEnabled(false); }