5

Występuje problem z obrazem select/unselect w widoku list. w moim przypadku,Widok poziomej perspektywy z zaznaczaniem i odznaczaniem obrazu

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

Jeśli użytkownik kliknij na sposób wtedy idealne, ale kiedy po raz pierwszy użytkownik kliknij na pierwszy obraz i drugi raz kliknij na obrazek, potem drugi obraz jest zarówno kolor pomarańczowy (jest to problem).

W moim przypadku tylko jeden kolor obrazu jest pomarańczowy (oznacza wybrany) na raz.

+0

Dodaj kod lub obraz. Trudno jest mi zrozumieć. –

+0

@Użyj tego http://pastebin.com/3eeZ38dN – Harshid

Odpowiedz

1
  1. Jeśli obsługujesz tylko HoneyComb i wyżej, będzie to łatwe. Utwórz StateListDrawable i ustaw go, aby wyświetlał tło elementu widoku.

selector.xml układ

<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 itemu

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

i ostatni, ustaw tryb wyboru listview do SINGLE

list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

2. Jeśli uda się wesprzeć pre plastra miodu, trzeba będzie napisać własny układ wdrożyć dostępne do kontroli. Robi się to, aby ćwiczyć przy użyciu sprawdzanego stanu :. Weźmy przykład z LinearLayout (możesz zrobić to samo z innymi).

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; 
} 
} 

Zastosowanie zwyczaj ten widok w 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 > 

Zmień state_activated do 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> 

również ustawić tryb wyboru listview do SINGLE. Jeśli to nie zadziała, dodaj onItemClickEvent podobny do tego:

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. 

      } 
     }); 
+0

dzięki. ale w moim układzie mam 2 textview i imageview. Więc jak zrobić obraz tylko w kolorze, mój widok tekstowy również klikalny. – Harshid

+0

Myślę, że można zawinąć powyżej układu w innym układzie i dodać więcej 2 przycisk. –

+0

Mam główny układ liniowy, a następnie cały obiekt z powiązanym układem. – Harshid