Je ne sais pas pourquoi mon onChildClick ne se déclenche pas. Tout fonctionne parfaitement, sauf que lorsque l'un des éléments enfants est exploité, il ne se passe absolument rien. Sinon, les groupes extensibles fonctionnent comme prévu.
Je suis revenu à cette utilisation de la case à cocher du fichier XML enfant. Lorsque je supprime cette case, onChildClick se déclenche comme prévu. Mais j'ai besoin de cette case à cocher pour la fonctionnalité de cette activité. Qu'est-ce que je fais mal? Merci!
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;
}
});
}
Voici les fichiers 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>
J? ai compris. Tout ce que j'avais à faire était d'ajouter
Android:focusable="false"
dans la section CheckBox de mon fichier expandlist_child_item.xml.
J'espère que cela aide quelqu'un.
Veillez à remplacer la méthode isChildSelectable de votre adaptateur de liste extensible et à renvoyer true, comme suit:
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
...
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
...
}
Regarde bien, toujours:
Vérifiez que vous n'avez défini aucun écouteur de clic sur une vue parent de listview.
Vérifiez que isChildSelectable()
de l'adaptateur retourne vrai. De plus, areAllItemsEnabled()
devrait retourner vrai.
La case à cocher ne doit pas être focalisable, ni cliquable.
La case à cocher ne doit pas être ciblée et cliquable.
<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" />
Je pense que vous devez utiliser onItemClickListener et utiliser le paramètre passé pour voir s'il s'agit d'un groupe ou non