2012-04-16 8 views
12

Chciałbym stworzyć układ liniowy, który zachowywałby się podobnie do ImageButton.Android: jak propagować zdarzenie kliknięcia do potomków LinearLayout i zmienić ich rysowanie

<LinearLayout 
    android:id="@+id/container" 
    style="?WidgetHomeIconContainer">    

    <ImageView 
     android:id="@+id/icon" 
     style="?WidgetHomeIcon" /> 

    <TextView 
     android:id="@+id/title" 
     style="?WidgetHomeLabel"    
     android:text="@string/title" 
     android:textAppearance="?attr/TextHomeLabel" /> 
</LinearLayout> 

W stylach ImageView, TextView i LinearLayout ustawiam selektory dla wszystkich stanów.

Teraz:

  • po kliknięciu na ImageView (próbowałem go również z ImageButton) - zachowuje się poprawnie, a obraz zmienia się w zależności xml wyboru.
  • po kliknięciu na LinearLayout - układ liniowy kliknięciu, ale The ImageView i TextView nie zmieni to odkształcalne/wygląd

Więc chciałbym wykonać następujące czynności. Kiedy klikam na rodzicu LinearLayout, muszę zmienić wszystkie dzieci na wciśnięty stan.

Próbowałem dodać następujący kod do LinearLayout onClickListener propagować kliknij:

@Override 
public void onClick(View v) 
{ 
    LinearLayout l = (LinearLayout) v; 
    for(int i = 0; i < l.getChildCount(); i++) 
    { 
     l.getChildAt(i).setClickable(true); 
     l.getChildAt(i).performClick(); 
    } 
} 

Ale to nadal reamins samo. Dziękuję bardzo za pomoc.

Odpowiedz

0

Po ten sam problem kilka miesięcy później, znalazłem tego rozwiązania:

private void setOnClickListeners() { 
    super.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      onClick(v); 
     } 
    }); 
    for (int index = 0; index < super.getChildCount(); index++) { 
     View view = super.getChildAt(index); 
     view.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       onClick(v); 
      } 
     }); 
    } 
} 

protected void onClick(View v) { 
    // something to do here... 
} 
2

Nie tylko zrobić dla każdego dziecko:

android:duplicateParentState="true" 

Ale także dodatkowo:

android:clickable="false" 

Zapobiegnie to nieoczekiwane zachowanie (lub rozwiązanie po prostu nie działa), jeśli klikalne widoki dziecko są używane.

SO Source

Powiązane problemy