2012-09-05 8 views
6

Quindi ho una voce di elenco personalizzata con pulsanti per un controllo ListView. Quando viene premuto, il pulsante visualizza il disegno alternato per mostrare il feedback all'utente. Tuttavia quando clicco sulla riga, ogni pulsante mostra lo stato premuto come se avessi cliccato su di essi.Come impedire che il pulsante all'interno di ListItem ottenga l'evidenziazione

Come si mantiene il pulsante in stato originale anziché in stato_pressione?

layout/List Item:

<LinearLayout 
    android:layout_width="0dp" 
    android:layout_height="match_parent" 
    android:layout_weight="1" 
    android:orientation="horizontal" 
    android:paddingBottom="10dp" 
    android:paddingTop="10dp" 
    android:descendantFocusability="blocksDescendants" > 

    <LinearLayout 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     android:orientation="vertical" 
     android:paddingLeft="10dp" 
     android:paddingRight="10dp" 
     android:gravity="center_vertical|left" > 

     <TextView 
      android:id="@+id/txtMain" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      style="@style/PrimaryText" /> 

     <TextView 
      android:id="@+id/txtSub" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:singleLine="true" 
      android:textAppearance="?android:attr/textAppearanceLarge" 
      style="@style/SecondaryText" /> 
    </LinearLayout> 

    <ImageButton 
     android:id="@+id/imbResponse" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@null" 
     android:focusable="false" 
     android:duplicateParentState="false" 
     android:src="@drawable/response_btn" 
     android:contentDescription="@string/response" 
     android:layout_marginLeft="10dp" 
     android:layout_marginTop="5dp" 
     android:layout_marginRight="10dp" 
     android:layout_marginBottom="5dp" /> 
</LinearLayout> 

drawable/response_btn.xml:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:state_focused="true" android:drawable="@drawable/res_m" /> 
    <item android:state_pressed="true" android:drawable="@drawable/res_m" /> 
    <item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/res_alt_m" /> 
</selector> 

ho cercato di rimuovere state_focused e state_pressed, state_focused. Sembra che il pulsante prenda state_pressed dal suo genitore.

+0

Qualche fortuna nel trovare una soluzione? – Sunkas

risposta

0

im mio parere è necessario disattivare lo stato dal padre come android:duplicateParentState="false"

aggiungere questo alla tua Button

+0

Cosa ho fatto;). A proposito, è ImageButton. – RobGThai

+0

anche nei tuoi layout –

+5

Provato, nessuna differenza però. – RobGThai

1

Questo rende il mio lavoro applicazione più difficile, ma si risolve il problema:

... 
mImageIcon.setOnTouchListener(new View.OnTouchListener() { 

     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
       v.setBackgroundResource(R.drawable.my-background); 
       break; 
      case MotionEvent.ACTION_UP: 
      case MotionEvent.ACTION_CANCEL: 
       /* 
       * You can use another background rather than 0. 
       */ 
       v.setBackgroundResource(0); 
       break; 
      } 

      return false; 
     }// onTouch() 
    }); 
+0

potresti spiegare questa soluzione? –

4

Ho scoperto che l'impostazione android:clickable="true" nella vista padre impedirà la modifica dello stato delle viste secondarie.

Vedere this answer.

1

Ho anche questo problema, lo faccio su Google e provalo per circa 3 ore! ora ho trovato la soluzione. basta aggiungere OnClickListener alla visualizzazione figlio. e anche NON FARE NULLA nel metodo OnClick. Funziona su emulatore 2.3 e il mio nesso 5.

Problemi correlati