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>
わかった。私がしなければならなかったのは追加することだけでした
Android:focusable="false"
expandlist_child_item.xmlファイルのCheckBoxセクション内。
これが誰かの助けになることを願っています。
拡張可能リストアダプターのisChildSelectableメソッドを必ずオーバーライドし、次のようにtrueを返します。
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
...
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
...
}
それでも大丈夫だ:
リストビューの親ビューにクリックリスナーを設定していないことを確認してください。
アダプターのisChildSelectable()
がtrueを返すことを確認してください。また、areAllItemsEnabled()
はtrueを返す必要があります。
チェックボックスはフォーカスもクリックもできません。
チェックボックスは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" />
OnItemClickListenerを使用し、渡されたパラメーターを使用して、グループクリックかどうかを確認する必要があると思います