web-dev-qa-db-ja.com

ExpandableListView子クリックリスナーが起動しない

OnChildClickが起動しない理由がわかりません。すべてが完全に機能しますが、子アイテムの1つがタップされても、何も起こりません。それ以外の場合、拡張可能なグループは期待どおりに機能します。

これは、子xmlファイルのチェックボックスの使用にまでさかのぼります。このチェックボックスを削除すると、onChildClickが正常に起動します。ただし、このアクティビティの機能にはこのチェックボックスが必要です。私は何を間違っていますか?ありがとう!

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

    }

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

わかった。私がしなければならなかったのは追加することだけでした

Android:focusable="false"

expandlist_child_item.xmlファイルのCheckBoxセクション内。

これが誰かの助けになることを願っています。

24
Alex

拡張可能リストアダプターのisChildSelectableメソッドを必ずオーバーライドし、次のようにtrueを返します。

public class MyExpandableListAdapter extends BaseExpandableListAdapter {
...

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

それでも大丈夫だ:

  1. リストビューの親ビューにクリックリスナーを設定していないことを確認してください。

  2. アダプターのisChildSelectable()がtrueを返すことを確認してください。また、areAllItemsEnabled()はtrueを返す必要があります。

12
S.D.

チェックボックスはフォーカスもクリックもできません。

4
Anfet

チェックボックスはfocuableおよびclickableであってはなりません。

<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

OnItemClickListenerを使用し、渡されたパラメーターを使用して、グループクリックかどうかを確認する必要があると思います

0
Snake