Горизонтальный просмотр с выбором и снятием изображения

Я получаю проблему при select/unselect снятии изображения в списке. в моем случае,

 ByDefault->image color(Yellow) First click->image color(Orange) Second click->image color(Yellow) 

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

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

  1. Если вы поддерживаете только HoneyComb и выше, это будет легко. Создайте StateListDrawable и установите его для отображения фона элемента списка.

selector.xml

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated="true" android:drawable="@drawable/item_focus" /> <item android:drawable="@android:color/transparent" /> </selector> 

Макет списка listview

 <ImageView android:id="@+id/image" android:layout_width="100dp" android:layout_height="100dp" android:padding="5dp" /> 

И последний, установите режим выбора списка в SINGLE

 list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

2. Если вам удастся поддерживать pre HoneyComb, вам придется написать свое собственное средство реализации. Вы делаете это для того, чтобы работать с проверенным состоянием . Возьмем пример с LinearLayout (вы можете сделать то же самое с другими).

  package com.example.listviewactivestate; import android.content.Context; import android.util.AttributeSet; import android.view.View; import android.widget.Checkable; import android.widget.LinearLayout; public class CustomLinearLayout extends LinearLayout implements Checkable { private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked }; private boolean checked = false; public CustomLinearLayout (Context context, AttributeSet attrs) { super(context, attrs); } public CustomLinearLayout (Context context) { super(context); } @Override public boolean isChecked() { return checked; } @Override public void setChecked(boolean checked) { this.checked = checked; refreshDrawableState(); // Propagate to childs final int count = getChildCount(); for (int i = 0; i < count; i++) { final View child = getChildAt(i); if (child instanceof Checkable) { ((Checkable) child).setChecked(checked); } } } @Override protected int[] onCreateDrawableState(int extraSpace) { final int[] drawableState = super.onCreateDrawableState(extraSpace + 1); if (isChecked()) { mergeDrawableStates(drawableState, CHECKED_STATE_SET); } return drawableState; } @Override public void toggle() { this.checked = !this.checked; } } 

Используйте этот пользовательский вид в xml

  <?xml version="1.0" encoding="utf-8"?> <com.example.listviewactivestate.CustomLinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:background="@drawable/selector" > <ImageView android:id="@+id/image" android:layout_width="100dp" android:layout_height="100dp" android:padding="5dp" /> </com.example.listviewactivestate.CustomLinearLayout > 

Изменить state_activated на state_checked

 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true" android:drawable="@drawable/item_focus" /> <item android:drawable="@android:color/transparent" /> </selector> 

Также установите режим выбора списка для SINGLE . Если он не работает, добавьте onItemClickEvent как это

 list.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO Auto-generated method stub list.setItemChecked(position, true);//make sure click item is set to checked. } }); 
Intereting Posts
Использование Facebook app_link_hosts API Response – 403 Разрешения – Android Android, AsyncTask с kSoap2 Какова концепция Р.Ява? Как открыть камеру в портретном режиме с помощью OpenCV в приложении для Android Помогите новичку изучать лучшие практики Eclipse / Android Самый приятный способ попросить пользователей перейти на новый пакет (удалить фактическое приложение и установить новый) Программно временно отключить автоматическое обновление Фрагмент над другим фрагментом Элегантный способ обработки LoaderCallbacks с помощью DialogFragment Библиотека поддержки Android значительно увеличивает размер APK Редактируемый курсор EditText, неправильно выполненный в первой строке Каков правильный способ проверки доступности мобильной сети (без подключения к данным) Почему невозможно использовать прописные буквы в ресурсах именования в android? Клавиатура автоматически появляется на Nexus7 версии 4.2 Объявление android: id зачем использовать «+»?