5

sto riscontrando problemi nell'immagine select/unselect in listiview. nel mio caso,HorizontalListview con immagine seleziona e deseleziona

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

Se l'utente clicca su oltre modo, allora perfetto, ma quando l'utente prima volta click prima immagine e la seconda volta click sulla seconda immagine in poi entrambi immagine a colori è di colore arancione (che è problema).

Nel mio caso, solo un colore dell'immagine è arancione (significa selezionato) alla volta.

+0

Aggiungi codice o immagine. Per me è difficile da capire. –

+0

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

risposta

1
  1. Se si supporta solo HoneyComb e sopra, sarà facile. Creare un oggetto StateListDrawable e impostarlo sullo sfondo dell'elenco di visualizzazione.

selector.xml disposizione

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

dell'oggetto ListView

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

.210

e l'ultimo, impostare la modalità scelta ListView SINGLE

list.setChoiceMode(ListView.CHOICE_MODE_SINGLE); 

2. Se si riesce a sostenere pre HoneyComb, si dovrà scrivere il proprio layout di implementare controllabile. Lo fai per allenarti usando lo stato selezionato . Prendiamo un esempio con LinearLayout (puoi fare lo stesso con gli altri).

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

Utilizzare questa visualizzazione personalizzata 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 > 

Change state_activated a 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> 

impostare anche la modalità scelta ListView SINGLE. Se non funziona, aggiungi onItemClickEvent in questo modo

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

grazie. ma nel mio layout ho 2 textview e imageview. Così come rendere a colori solo imageview, anche la mia textview è cliccabile. – Harshid

+0

Penso che puoi avvolgere il layout sopra un altro layout e aggiungere altri 2 pulsanti. –

+0

ya ho il layout lineare principale e quindi tutti gli oggetti con layout correlato. – Harshid

Problemi correlati