it-swarm.com.de

Untergeordneter ExpandableListView-Listener wird nicht ausgelöst

Nicht sicher, warum mein onChildClick nicht feuert. Alles funktioniert einwandfrei, außer dass, wenn eines der untergeordneten Elemente berührt wird, absolut nichts passiert. Ansonsten funktionieren die erweiterbaren Gruppen wie erwartet. 

Ich habe dies auf meine Verwendung des Kontrollkästchens in der untergeordneten XML-Datei zurückgeführt. Wenn ich dieses Kontrollkästchen entferne, wird der onChildClick wie erwartet ausgelöst. Ich brauche dieses Kontrollkästchen für die Funktionalität dieser Aktivität. Was mache ich falsch? Vielen Dank!

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;
            }
        });

    }

Hier sind die XML-Dateien:

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

Ich habe es verstanden. Ich musste nur hinzufügen

Android:focusable="false"

innerhalb des CheckBox-Abschnitts meiner Datei expandlist_child_item.xml.

Ich hoffe, dass das jemandem hilft.

24
Alex

Stellen Sie sicher, dass Sie die isChildSelectable-Methode Ihres erweiterbaren Listenadapters überschreiben und true zurückgeben.

public class MyExpandableListAdapter extends BaseExpandableListAdapter {
...

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

Sieht immer noch gut aus:

  1. Stellen Sie sicher, dass Sie keinen Klicklistener für eine übergeordnete Ansicht der Listenansicht festgelegt haben.

  2. Stellen Sie sicher, dass isChildSelectable() des Adapters true zurückgibt. Auch areAllItemsEnabled() sollte true zurückgeben.

12
S.D.

Das Kontrollkästchen sollte weder fokussierbar noch anklickbar sein.

3
Anfet

Das Kontrollkästchen sollte nicht fokussierbar und anklickbar sein. 

<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

Ich denke, Sie müssen den onItemClickListener verwenden und den übergebenen Parameter verwenden, um zu sehen, ob es sich um einen Gruppenklick handelt

0
Snake