2012-04-18 47 views
4

当我尝试将可扩展列表插入现有活动(不是从ExpandalbleListActivity派生)时,遇到了几个问题。ExpandableListView不会作出反应并收到任何点击

该列表的显示方式与我在XML布局中描述的相似,但是当我尝试单击/展开它时,它并不反应。

为了测试,我在列表上方插入了一个按钮,它收到点击。它自己的列表不会说clickable = false。

代码用于扩展列表:

<ExpandableListView 
android:id="@+id/h_Zzwa_activity_listView" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:groupIndicator="@color/transparent" android:clickable="true"> 
</ExpandableListView> 

用于初始化列表的代码:

this.m_adapter = new HZzwaListAdapter(this, m_requests); 
    listZzwa = (ExpandableListView) findViewById(R.id.h_Zzwa_activity_listView); 
    listZzwa.setAdapter(this.m_adapter) 

适配器(其被发起和组..被调用)

public class HZzwaListAdapter extends BaseExpandableListAdapter 
{ 

private List<HMyMessage> items; 
private Context myContext; 


public HZzwaListAdapter(Context context) 
{ 
    myContext = context; 
} 

public HZzwaListAdapter(Context context, List<HMyMessage> items) 
{ 
    myContext = context; 
    this.items = items; 
} 





@Override 
public View getChildView(int groupPosition, int childPosition, 
     boolean isLastChild, View convertView, ViewGroup parent) 
{ 

    if (convertView == null) 
    { 
     LayoutInflater inflater = (LayoutInflater) myContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater.inflate(R.layout.h_Zzwa_list_subitem, 
       null); 
    } 

    HMyMessage message = items.get(childPosition); 
    if (message != null) 
    { 
     TextView tvPlayerName = (TextView) convertView 
       .findViewById(R.id.h_Zzwalistitem_info_signText); 
     tvPlayerName.setText(message.info.getSign()); 
    } 
    return convertView; 
} 


@Override 
public int getChildrenCount(int groupPosition) 
{ 
    return 1; 
} 


@Override 
public Object getGroup(int groupPosition) 
{ 
    return null; 
} 


@Override 
public int getGroupCount() 
{ 
    return items.size(); 
} 


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


@Override 
public View getGroupView(int groupPosition, boolean isExpanded, 
     View convertView, ViewGroup parent) 
{ 

    if (convertView == null) 
    { 
     LayoutInflater inflater = (LayoutInflater) myContext 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     convertView = inflater 
       .inflate(R.layout.h_machching_list_item, null); 
    } 

    // Get item and set it into the view 
    HMyMessage plan = (HMyMessage) items.get(groupPosition); 
    if (plan != null) 
    { 
     TextView pname = (TextView) convertView 
       .findViewById(R.id.h_Zzwalistitem_pname); 
     TextView pF = (TextView) convertView 
       .findViewById(R.id.h_Zzwalistitem_pText); 

     if (pname != null) 
     { 
      pname.setText(plan.requester.getName()); 
     } 
     if (pF != null) 
     { 
      pF.setText(plan.p + " unit "); 
     } 
    } 

    return convertView; 

} 


@Override 
public boolean hasStableIds() 
{ 
    return false; 
} 


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

@Override 
public Object getChild(int groupPosition, int childPosition) 
{ 
    // TODO Auto-generated method stub 
    return null; 
} 

@Override 
public long getChildId(int groupPosition, int childPosition) 
{ 
    // TODO Auto-generated method stub 
    return 0; 
} 

} 

即使当我为click或listItemClick事件设置监听器时,也不会发生任何事情。

为什么?同样的事情的作品非常好,通常列表:/

谢谢

回答

2

它的工作我创建了一个新的group.xml并用这个代替现有一个

+4

我发现一个包含imagebutton的布局不会抛出事件。移除IMAGEBUTTON(改为使用imageview),它会起作用......无论如何...... – elCapitano 2012-05-02 10:14:23

+0

同样在这里。奇怪。 – user3329166 2016-02-16 20:41:46

+0

@elCapitano您应该使用上面的注释更新答案。 – user1592546 2017-04-07 09:48:38

4

您需要使用适当的侦听器的可扩展列表...他们是不一样的,作为一个正常的列表。

例子:

lv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
    @Override 
    public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) 
    { 
     // Your code for click action here. 
     return true; 
    } 
}); 

还有一个类似的OnGroupClickListener。

有关详情,请检查docs

+0

Thi Barak,谢谢你的支持者,但这没有帮助。看起来expandableList没有收到任何东西:( – elCapitano 2012-04-18 14:14:16

+0

这很奇怪,它适用于我,但我使用的是SimpleCursorTreeAdapter,所以也许在这里有一些区别,但我认为适配器不会有什么区别 – Barak 2012-04-18 14:37:19

+0

它真的似乎没有事件发生在点击上,我会尝试一种不同的方法,无论如何感谢。) – elCapitano 2012-04-18 15:14:34

6

请加上孩子和组布局之后。与列表视图,有一个类似的问题,列表视图不接收onItemClick当listview的项目有按钮。我遇到了这个问题之前,所以我必须的onclick实施的每个项目在adapter.Check这article ListView doesn’t respond to OnItemClickListenerIssue 3414 ListView doesn't receive OnItemClick/OnItemLongClick for items with clickable or focusable content

编辑:android:focusable="false"Button视图或EditText视图。

+0

正如你所说,当它有一个按钮,设置'android:focusable =“false”' – 2016-03-12 17:46:04

+0

添加focusable =“false”为我工作。 – 2016-09-14 20:01:36

2

我在父视图中使用了一些可点击的组件(如Checkbox,ToggleButton,ImageButton等),然后点击事件未被触发。

您可以在您的适配器中设置getGroupView单击convertView的侦听器。

0

我知道这是一个老问题,但我最近从我的程序中收到了同样的问题。我的ExpandableListView没有响应,点击组的点击事件。因此,而不是实现ExpandableListView.OnItemClickListener,我实现了ExpandableListView.OnGroupClickListener,它的工作方式就像魅力一样。希望这有助于稍后收到此问题的人。

-1

android:descendantFocusability="blocksDescendants"添加到您正在膨胀的基础布局,而不会再像以前那样接收触摸事件。

0

在适配器中创建一个接口。

public interface IExpandableListAdapter { 
     void onItemClick(int groupPosition, boolean isExpanded); 
} 

您的活动添加这个onClickListener您持有人视图

holderView.setOnClickListener(view -> iExpandableListAdapter.onItemClick(groupPosition, isExpanded)); 

覆盖接口。

ExpandableListAdapter expandableListAdapter = new ExpandableListAdapter(context, list, (groupPosition, isExpanded) -> { 
     if(isExpanded) 
      expandableListView.collapseGroup(groupPosition); 
     else 
      expandableListView.expandGroup(groupPosition); 
}); 

现在您可以在您的适配器中使用Button,ImageButton等的点击事件。

相关问题