2013-04-13 75 views
0

我一直在寻找其他人在这个问题上的答案,但到目前为止似乎没有任何工作。onChildClick Event for ExpandableListAdapter无法正常工作

目前我有一个ExpandableListAdapter,它是根据SDK附带的一个示例构建的。至于显示数据我得到它的工作很好,但我不能让onChildClick事件工作。我试着将XML元素上的focusable属性设置为false,但我仍然没有任何运气。

目前,这是我的代码:

MainActivity.java

package com.example.expandablelisttest; 

import android.os.Bundle; 
import android.app.Activity; 
import android.view.Menu; 
import android.widget.ExpandableListView; 

public class MainActivity extends Activity { 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    ExpandableListView expandableListView = (ExpandableListView) findViewById(R.id.expandableListView1); 

    ExpandableListAdapter expandableAdapter = new ExpandableListAdapter(); 

    expandableListView.setAdapter(expandableAdapter); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 
} 

ExpandableListAdapter.java

package com.example.expandablelisttest; 

import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseExpandableListAdapter; 
import android.widget.ExpandableListView; 
import android.widget.TextView; 
import android.widget.Toast; 

public class ExpandableListAdapter extends BaseExpandableListAdapter 
implements ExpandableListView.OnChildClickListener 
{  
private String[] groups = { "People Names", "Dog Names", "Cat Names", "Fish Names" }; 
private String[][] children = { 
     { "Arnold", "Barry", "Chuck", "David" }, 
     { "Ace", "Bandit", "Cha-Cha", "Deuce" }, 
     { "Fluffy", "Snuggles" }, 
     { "Goldy", "Bubbles" } 
}; 



public Object getChild(int groupPosition, int childPosition) { 
    return children[groupPosition][childPosition]; 
} 

public long getChildId(int groupPosition, int childPosition) { 
    return childPosition; 
} 

@Override 
public View getChildView(int groupPosition, int childPosition, 
     boolean isLastChild, View convertView, ViewGroup parent) 
{ 
    if (convertView ==null) 
    { 
     LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());   
     convertView = layoutInflater.inflate(R.layout.child_view, null); 
    } 

    TextView childTxt = (TextView) convertView.findViewById(R.id.childTxt); 
    childTxt.setText(getChild(groupPosition, childPosition).toString()); 

    return convertView; 
} 

@Override 
public int getChildrenCount(int groupPosition) { 
    return children[groupPosition].length; 
} 

@Override 
public Object getGroup(int groupPosition) { 
    return groups[groupPosition]; 
} 

@Override 
public int getGroupCount() { 
    return groups.length; 
} 

@Override 
public long getGroupId(int groupPosition) { 
    return groupPosition; 
} 

@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
     View convertView, ViewGroup parent) 
{ 
    if (convertView ==null) 
    { 
     LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext()); 
     convertView = layoutInflater.inflate(R.layout.group_view, null); 
    } 

    TextView groupTxt = (TextView) convertView.findViewById(R.id.groupTxt); 
    groupTxt.setText(getGroup(groupPosition).toString()); 

    return convertView; 
} 

@Override 
public boolean hasStableIds() { 
    // TODO Auto-generated method stub 
    return true; 
} 

@Override 
public boolean isChildSelectable(int groupPosition, int childPosition) { 
    // TODO Auto-generated method stub 
    return true; 
} 

@Override 
public boolean onChildClick(ExpandableListView parent, View v, 
    int groupPosition, int childPosition, long id) 
{ 
    Log.d("Result:", "Click event triggered"); 
    return true; 
} 
} 

activity_main.xml中

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" > 

    <ExpandableListView 
     android:id="@+id/expandableListView1" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" > 
    </ExpandableListView> 

</LinearLayout> 

child_view .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="match_parent" 
android:orientation="vertical" 
android:focusable="false" > 

<TextView 
    android:id="@+id/childTxt" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="Medium Text" 
    android:textAppearance="?android:attr/textAppearanceMedium" 
    android:focusable="false"/> 

</LinearLayout> 

group_view.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="match_parent" 
android:orientation="vertical" 
android:focusable="false" > 

<TextView 
    android:id="@+id/groupTxt" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:paddingLeft="36dp" 
    android:text="Large Text" 
    android:textAppearance="?android:attr/textAppearanceLarge" 
    android:focusable="false" /> 

</LinearLayout> 

如果任何人都可以看到,为什么我的点击事件不点火,可以帮助我。我将不胜感激。提前致谢。

回答

2

OnChildClickListener不属于Adapter它应该被添加到ExpandableListView而不是你的Activity

像这样:

expandableListView.setOnChildClickListener(new OnChildClickListener() { 
    @Override 
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 
     // Handle clicks on the children here... 
     return false; 
    } 
}); 
+0

完美!它现在有效。非常感谢。 –

8

这主要发生,因为你的孩子没有得到选择,当你想一下就可以了,因为其中包含了这样的方法适配器被称为isChildSelectable()返回FLASE默认情况下,所以使它真实,因为你希望它被选中和问题得到解决......谢谢:)

0

更改布尔返回值如果您使用isChildSelectable返回值true在适配器中返回false。您可以使用此

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

代替

@Override 
     public boolean isChildSelectable(int groupPosition, int childPosition) { 
      return false; 
     }