5

Ich bekomme ein Problem in Bild select/unselect in listiview. in meinem FallHorizontalListview mit Bild auswählen und nicht auswählen

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

Wenn Benutzer auf über Art und Weise dann perfekt, aber wenn der Benutzer erstmals Klick auf erstes Bild und die zweiten Mal, klicken Sie auf zweites Bild dann beide Bildfarbe orange ist (das ist Problem).

In meinem Fall ist nur eine Bildfarbe orange (bedeutet ausgewählt) zu einer Zeit.

+0

Bitte fügen Sie einen Code oder ein Bild hinzu. Für mich ist es schwer zu verstehen. –

+0

@Yul siehe http://pastebin.com/3eeZ38dN – Harshid

Antwort

1
  1. Wenn Sie nur HoneyComb und höher unterstützen, wird es einfach. Erstellen Sie eine StateListDrawable, und legen Sie sie auf den Hintergrund des Listenansichtselements fest.

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-Element Layout

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

und die letzte, stellen Sie Ihren Listenansicht Wahl-Modus zu SINGLE

list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

2. Wenn Sie verwalten pre HoneyComb zu unterstützen, müssen Sie Ihr eigenes Layout überprüfbar implementieren schreiben. Sie tun dies, um mit geprüften Zustand auszuarbeiten. Nehmen wir ein Beispiel mit LinearLayout (Sie können dasselbe mit anderen machen).

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

Verwenden Sie diese benutzerdefinierte Ansicht in 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 > 

ändern state_activated zu 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> 

Auch gesetzt Listenansicht Wahl-Modus zu SINGLE. Wenn es nicht funktioniert, fügen Sie onItemClickEvent wie folgt hinzu

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

danke. aber in meinem Layout habe ich 2 textview und imageview.So, wie man nur imageview Farbe bildet, meine Textansicht auch anklickbar. – Harshid

+0

Ich denke, Sie können über Layout in einem anderen Layout umbrechen und mehr 2 Schaltfläche hinzufügen. –

+0

ya Ich habe das Hauptlinearlayout und dann alle Objekte mit zugehörigem Layout. – Harshid