web-dev-qa-db-fra.com

L'auditeur de clic enfant ExpandableListView ne se déclenche pas

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

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.

24
Alex

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;
}
...
}
54
Jan

Regarde bien, toujours:

  1. Vérifiez que vous n'avez défini aucun écouteur de clic sur une vue parent de listview.

  2. Vérifiez que isChildSelectable() de l'adaptateur retourne vrai. De plus, areAllItemsEnabled() devrait retourner vrai.

12
S.D.

La case à cocher ne doit pas être focalisable, ni cliquable.

3
Anfet

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" />
0
Tarun Voora

Je pense que vous devez utiliser onItemClickListener et utiliser le paramètre passé pour voir s'il s'agit d'un groupe ou non

0
Snake