Элемент списка избранных элементов Android ListView выделен

У меня есть XML с двумя ListView , один со списком клиентов, заполненный запросом select ( lv_cli ), а другой с информацией о выбранном клиенте ( lv_cli_det ). Я хочу, чтобы клиент был выбран в lv_cli то время как lv_cli_det показывает подробности.

XML:

     

Ява:

 Cursor cursor = db.rawQuery("Select NrCl||';'||Nome From Clientes", null); final ListView t = (ListView)findViewById(R.id.cli_lista); ArrayAdapter myarrayAdapter = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, listItems); t.setAdapter(myarrayAdapter); final ListView td = (ListView)findViewById(R.id.cli_lista_detalhe); final ArrayAdapter myarrayAdapter2 = new ArrayAdapter(this, android.R.layout.simple_expandable_list_item_1, listItems2); t.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { String item = ((TextView)view).getText().toString(); String[] strArray = item.split("\\;"); cli.load(strArray[0].toString()); td.setAdapter(myarrayAdapter2); listItems2.clear(); listItems2.add("Nome: " + cli.getNome()); listItems2.add("Morada: " + cli.getMorada()); listItems2.add("Localidade: " + cli.getLoca()); listItems2.add("Código Postal: " + cli.getCp()); listItems2.add("Pais: " + cli.getPais()); listItems2.add("Nif: " + cli.getNif()); listItems2.add("Tel: " + cli.getTel()); listItems2.add("Tlm: " + cli.getTlm()); listItems2.add("Tipo Preço: " + cli.getTipoPvn()); listItems2.add("Cond. Pagamento: " + cli.getCpg()); listItems2.add("Obs: " + cli.getObs()); td.setAdapter(myarrayAdapter2); myarrayAdapter2.notifyDataSetChanged(); } }); 

Чтобы удерживать цвет элемента списка при его нажатии, включите следующую строку в макет элемента списка:

 android:background="@drawable/bg_key" 

Затем определите bg_key.xml в bg_key.xml папке следующим образом:

      

Наконец, onClickListener это в свой ListView onClickListener :

 listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position,long arg3) { view.setSelected(true); ... // Anything } }); 

Таким образом, только один элемент будет выбран в любое время. Вы можете определить свои значения цвета в res/values/colors.xml примерно так:

   #4d90fe #ffffff  

Нашел правильный путь. Это очень просто. В ресурсе описывается следующее:

 android:choiceMode="singleChoice" android:listSelector="#666666" 

(или вы можете указать ссылку ресурса вместо значения цвета)

Программный способ:

 listView.setSelector(Drawable selector) listView.setSelector(int resourceId) listView.setChoiceMode(int mode) 

mode может быть одним из них: AbsListView.CHOICE_MODE_SINGLE, AbsListView.CHOICE_MODE_MULTIPLE, AbsListView.CHOICE_MODE_NONE (по умолчанию)

(AbsListView является абстрактным предком для classа ListView)

PS манипуляции с onItemClick и изменение фона обзора являются обанкротившимися, поскольку само представление является временным объектом. Следовательно, вы не должны отслеживать представление.

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

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { for (int j = 0; j < adapterView.getChildCount(); j++) adapterView.getChildAt(j).setBackgroundColor(Color.TRANSPARENT); // change the background color of the selected element view.setBackgroundColor(Color.LTGRAY); }); 

Возможно, вы захотите сохранить текущий выбранный элемент в глобальной переменной, используя индекс i.

Упрощенный способ: если вы используете listview в xml, используйте эти атрибуты в своем списке,

 android:choiceMode="singleChoice" android:listSelector="#your color code" 

если не использовать xml, программно

 listview.setChoiceMode(AbsListView.CHOICE_MODE_SINGLE); listview.setSelector(android.R.color.holo_blue_light); 

Вам нужен селектор:

        

А затем установите android:choiceMode="singleChoice" в ваш ListView.

Из примера Авинаша Кумара Панкаджа

 View v; 

затем по методу oncreate

 v = new View(getActivity()); 

и затем onlistitemclick метод, который я написал

 public void onListItemClick(ListView listView, View view, int position, long id) { v.setBackgroundResource(0); view.setBackgroundResource(R.color.green); v = view; } 

Это сработало для меня. Спасибо.

Я заменил

 v = new View(getActivity()); 

в

 v = new View(this); 

и код работал хорошо.

Необходимо также, чтобы xml-файлы «цвета» и «bg_key» из предыдущих примеров, а также атрибут ListView android: background = «@ drawable / bg_key»

Mauro

* убедитесь, что в корневом макете контейнера просмотра списка нет пульсации

добавьте эту строку в свой список

 android:listSelector="@drawable/background_listview" 

вот файл «background_listview.xml»

    

цвета, используемые в файле background_listview.xml:

 #cc7e00 #ffffffff 

после этого

(нажатый элемент содержит оранжевый цвет, пока вы не нажмете другой элемент)

Один из способов сделать это – отслеживать текущую выбранную позицию в вашей деятельности:

 @Override public void onItemClick(AdapterView arg0, View arg1, int position, long arg3) { currentPosition = position lv_cli.notifyDataSetChanged(); } 

Теперь убедитесь, что вы назначили идентификатор родительскому макету (linearLayout, boxLayout, relativeLayout, .. независимо от того, что вы предпочитаете) вашего элемента списка.

Затем в вашем ListView вы можете сделать что-то вроде этого:

 layoutBackground = (LinearLayout) convertView.findViewById(R.id.layout_background); if (YourActivity.this.currentPosition == position) { layoutBackground.setBackgroundColor(YourActivity.this.getResources().getColor(R.color.hilight_color)); } else{ layoutBackground.setBackgroundResource(R.drawable.list_item_drawable); } 

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

ПРИМЕЧАНИЕ. Этот простой код не использует вид-держатель, но я действительно рекомендую его использовать.

Вместо этого используйте идентификатор:

Это самый простой способ, который может обрабатываться, даже если список длинный:

 public View getView(final int position, View convertView, ViewGroup parent) { // TODO Auto-generated method stub Holder holder=new Holder(); View rowView; rowView = inflater.inflate(R.layout.list_item, null); //Handle your items. //StringHolder.mSelectedItem is a public static variable. if(getItemId(position)==StringHolder.mSelectedItem){ rowView.setBackgroundColor(Color.LTGRAY); }else{ rowView.setBackgroundColor(Color.TRANSPARENT); } return rowView; } 

И затем в вашем onclicklistener:

 list.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView adapterView, View view, int i, long l) { StringHolder.mSelectedItem = catagoryAdapter.getItemId(i-1); catagoryAdapter.notifyDataSetChanged(); ..... 
  • JSON Array итерация в Android / Java
  • Наследование Java - переопределение переменных экземпляра
  • Отладка Android InetAddress.isReachable
  • Как удалить все обратные вызовы из обработчика?
  • getString вне контекста или действия
  • Есть ли какой-нибудь метод sizeof в Java?
  • Как очистить кеш проекта в идее Intellij, например, Eclipse?
  • отображение AM и PM в маленькой букве после форматирования даты
  • Измените .txt-файл в Java
  • Кросс-платформенный способ изменения приоритета Java-процесса
  • remove () в списке, созданном с помощью Arrays.asList () throws UnsupportedOperationException
  • Interesting Posts

    Как написать код WinForms, который автоматически масштабируется до системных настроек шрифта и dpi?

    Гарантирует ли Java, что Object.getClass () == Object.getClass ()?

    Может ли Google Chrome открывать локальные ссылки?

    C #: Передача null в перегруженный метод – какой метод вызывается?

    Мерцающий черный экран после kb2919355 (Windows 8.1 Update 1) – нет доступа к ОС – нет безопасного режима – невозможно восстановить систему

    Можно ли использовать динамическое выражение xPath в таблице стилей xslt?

    Регулярное выражение для подсчета числа запятых в строке

    regex для zip-кода

    Ошибка в инструкции if – не может неявно преобразовывать тип в ‘bool’

    Исключение переполнения для int в C #?

    Как измерить общее использование ОЗУ в программе под Windows?

    Перезагрузка страницы дает неправильный запрос GET с режимом AngularJS HTML5

    dynamic_cast и static_cast в C ++

    Как реализовать функцию Softmax в Python

    RequiredIf Атрибут условной проверки

    Давайте будем гением компьютера.