ExpandableListView子点击侦听器未触发
不确定为什么我的onChildClick未触发。一切都很完美,除了当其中一个子项目被挖掘时,绝对没有任何反应。否则,可扩展组将按预期工作。ExpandableListView子点击侦听器未触发
我已经追溯到我使用的子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>
我明白了。我只需要在我的expandlist_child_item.xml文件的CheckBox部分添加
android:focusable="false"
。
我希望这有助于某人。
我认为玉有使用onItemClickListener和使用传递的参数,看它是否是集团点击与否
看上去一切正常,还是:
检查你有没有设定一个点击监听任何父视图的列表视图。
检查适配器的
isChildSelectable()
是否返回true。另外areAllItemsEnabled()
应该返回true。
一定要重写您的扩展列表适配器的isChildSelectable方法并返回true,就像这样:
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
...
@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
return true;
}
...
}
这似乎是许多情况下的问题,自定义布局用于填充父项,自定义布局中的视图将窃取焦点,并将实现那里自己的ClickListners和LongClickListeners .... –
复选框不应该成为焦点,也可点击。
复选框不应该focuable和点击..
<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" />
感谢,我也有这个问题。让我试试你的解决方案。 –
是的,它为我工作,但当我们点击复选框项目时,onlick听众也没有开火。 – Srinivasan
这是正确的答案。谢谢@Alex –