2013-06-03 96 views
24

不确定为什么我的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> 

回答

21

我明白了。我只需要在我的expandlist_child_item.xml文件的CheckBox部分添加

android:focusable="false" 

我希望这有助于某人。

+0

感谢,我也有这个问题。让我试试你的解决方案。 –

+0

是的,它为我工作,但当我们点击复选框项目时,onlick听众也没有开火。 – Srinivasan

+0

这是正确的答案。谢谢@Alex –

0

我认为玉有使用onItemClickListener和使用传递的参数,看它是否是集团点击与否

12

看上去一切正常,还是:

  1. 检查你有没有设定一个点击监听任何父视图的列表视图。

  2. 检查适配器的isChildSelectable()是否返回true。另外areAllItemsEnabled()应该返回true。

51

一定要重写您的扩展列表适配器的isChildSelectable方法并返回true,就像这样:

public class MyExpandableListAdapter extends BaseExpandableListAdapter { 
... 

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

这似乎是许多情况下的问题,自定义布局用于填充父项,自定义布局中的视图将窃取焦点,并将实现那里自己的ClickListners和LongClickListeners .... –

3

复选框不应该成为焦点,也可点击。

0

复选框不应该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" /> 
相关问题