2013-06-03 9 views
24

Non sono sicuro del motivo per cui il mio onChildClick non viene attivato. Tutto funziona perfettamente, tranne che quando uno degli elementi figlio viene TAPpato, non accade assolutamente nulla. Altrimenti, i gruppi espandibili funzionano come previsto.EspandibileListView listener di clic figlio non attivato

Ho risalito questo al mio utilizzo della casella di controllo nel file xml figlio. Quando rimuovo questa casella di controllo, onChildClick si attiva come previsto. Ma ho bisogno di questa casella di controllo per la funzionalità di questa attività. Cosa sto facendo di sbagliato? Grazie!

public class MySettings extends Activity { 

    private ExpandListAdapter expAdapter; 
    private ArrayList<ExpandListGroup> expListItems; 
    private ExpandableListView expandableList; 
    private String client; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_my_settings); 

     expandableList = (ExpandableListView) findViewById(R.id.expandable_list); 
     expListItems = SetStandardGroups(); //works fine - can show code if needed 
     expAdapter = new ExpandListAdapter(MySettings.this, expListItems); 
     expandableList.setAdapter(expAdapter); 

     expandableList.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 

      @Override 
      public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 
       //Nothing here ever fires 
       System.err.println("child clicked"); 
       Toast.makeText(getApplicationContext(), "child clicked", Toast.LENGTH_SHORT).show(); 
       return true; 
      } 
     }); 

    } 

Qui ci sono i file XML:

activity_my_settings.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    android:background="@drawable/background" > 

    <ImageView 
     android:id="@+id/logo" 
     android:layout_marginTop="5dip" 
     android:layout_alignParentTop="true" 
     android:layout_width="wrap_content" 
     android:layout_height="70dp" 
     android:layout_gravity="left" 
     android:contentDescription="@string/blank" 
     android:src="@raw/logo" > 
    </ImageView> 

    <TextView 
     android:id="@+id/my_settings" 
     android:textColor="#000000" 
     android:layout_below="@id/logo" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="10dp" 
     android:gravity="center" 
     android:text="@string/my_settings" 
     android:textSize="30sp" 
     android:textStyle="bold" /> 

    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_below="@id/my_settings" > 

     <ExpandableListView 
      android:id="@+id/expandable_list" 
      android:scrollingCache="false" 
      android:layout_marginTop="20dip" 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent" /> 

    </LinearLayout> 

</RelativeLayout> 

expandlist_group_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="55dip" 
    android:background="#FF7C7C7C" > 

    <TextView 
     android:id="@+id/group_header" 
     android:layout_marginLeft="40dp" 
     android:layout_width="fill_parent" 
     android:layout_height="40dp" 
     android:gravity="center_vertical" 
     android:textColor="#000000" 
     android:textSize="22sp" /> 

</LinearLayout> 

expandlist_child_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="55dip" 
    android:orientation="horizontal" > 

    <CheckBox 
     android:id="@+id/check_box" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView 
     android:id="@+id/expand_list_item" 
     android:paddingLeft="10dp" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:textSize="@dimen/smart_finder_settings_font_size" 
     android:textColor="#FFFFFF" /> 

</LinearLayout> 

risposta

21

Ho capito. Tutto quello che dovevo fare era aggiungere

android:focusable="false" 

all'interno della sezione CheckBox del mio file expandlist_child_item.xml.

Spero che questo aiuti qualcuno.

+0

grazie, ho anche questo problema. Lasciami provare la tua soluzione. –

+0

Sì, funziona, ma quando clicchiamo sulla voce di controllo esattamente in quel momento anche il listener onlick non sta funzionando. – Srinivasan

+0

questa è la risposta corretta. Grazie @Alex –

0

penso yu devono utilizzare l'onItemClickListener e utilizzare il parametro passato per vedere se è il gruppo scatto o non

12

Sembra tutto a posto, ancora:

  1. Verificare che non è stato impostato un click ascoltatore a qualsiasi visualizzazione genitore di listview.

  2. Verificare che l'adattatore isChildSelectable() restituisca true. Anche areAllItemsEnabled() dovrebbe restituire true.

51

Assicurarsi di eseguire l'override del metodo isChildSelectable della scheda elenco espandibile e tornare vero, in questo modo:

public class MyExpandableListAdapter extends BaseExpandableListAdapter { 
... 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    return true; 
} 
... 
} 
+0

Questo sembra essere un problema in molte situazioni in cui i layout personalizzati vengono utilizzati per riempire il genitore, le viste nel layout personalizzato ruberanno l'attenzione e implementeranno proprio ClickListner e LongClickListeners. –

3

Casella di controllo non dovrebbe essere attivabile, nè cliccabile.

0

casella di controllo non dovrebbe essere focuable e cliccabile ..

<CheckBox 
      android:focusable="false" 
      android:clickable="false" 
      android:focusableInTouchMode="false" 
      android:id="@+id/expandedListItem" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" 
      android:paddingTop="10dp" 
      android:paddingBottom="10dp" /> 
Problemi correlati