2012-09-05 11 views
6

Tak więc mam niestandardowy element listy z przyciskami do ListView. Po naciśnięciu przycisk wyświetla alternatywne losowanie, aby wyświetlić informację zwrotną dla użytkownika. Jednak po kliknięciu na wiersz wszystkie przyciski pokazują stan wciśnięty, tak jakbym je kliknął.Jak zabezpieczyć przycisk wewnątrz ListItem, aby uzyskać zaznaczenie

Jak zachować przycisk wyświetla oryginalny stan zamiast state_pressed?

układ/Lista tytułów:

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

odkształcalne/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> 

Próbowałem remove state_focused i state_pressed, state_focused. Wygląda na to, że przycisk bierze state_pressed od swojego rodzica.

+0

Przy odrobinie szczęścia znalezienie rozwiązania? – Sunkas

Odpowiedz

0

im moim zdaniem trzeba wyłączyć stan od rodzica jako android:duplicateParentState="false"

dodać do swojej Button

+0

Który zrobiłem;). It's ImageButton przy okazji. – RobGThai

+0

również w twoich układach –

+5

Wypróbowałem to, nie ma różnicy. – RobGThai

1

To sprawia, że ​​moja aplikacja pracę trudniej, ale to rozwiązuje problem:

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

czy możesz wyjaśnić to rozwiązanie? –

4

Dowiedziałem się, że ustawienie android:clickable="true" do widoku rodzica uniemożliwi zmianę widoków podrzędnych.

Zobacz this answer.

1

Mam również ten problem, Google go i spróbuj około 3 godzin! teraz znalazłem rozwiązanie. po prostu dodaj OnClickListener do widoku potomnego. a nawet ZROBIĆ NIC w metodzie OnClick. Działa na emulatorze 2.3 i moim nexusie 5.

Powiązane problemy