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

Я получаю проблему при 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
Загрузка с камеры и галереи не работает должным образом во всех версиях Как перехватить события касания от ViewPager.OnPageChangeListener Как я могу отправить SMS из BroadcastReceiver и проверить его статус? EditText с SpannableStringBuilder и ImageSpan не работает нормально Является ли основная нить такой же, как поток пользовательского интерфейса? Как вы можете определить, когда был составлен макет? IllegalArgumentException в модификации / не должен иметь блок замены RecyclerView – переход на позицию, затем плавное прокручивание вверх Невозможно изменить ArrayAdapter в ListView: UnsupportedOperationException Сохранение настраиваемого массива объектов в общих настройках Здание с кордовой для android создает неправильный код версии Что делает LayoutInflater в Android? Как установить конкретное контекстное меню в зависимости от того, какой элемент долго нажат в ListActivity? SetText (getString (R.strings.whatever) или setText (R.strings.whatever)? Что означает «Неудача » в Android Studio?