列表显示的内容与我的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事件设置了一个监听器,也没有任何反应。
为什么呢?通常的列表同样适用:/
谢谢
答案 0 :(得分:7)
请添加子组和组布局。对于listview,当listview的项目有按钮时,listview没有收到onItemClick
的类似问题。我之前遇到过这个问题所以我必须为适配器中的每个项目实现onclick.Check this article ListView doesn’t respond to OnItemClickListener
和Issue 3414 ListView doesn't receive OnItemClick/OnItemLongClick for items with clickable or focusable content
编辑:为android:focusable="false"
视图或Button
视图添加EditText
。
答案 1 :(得分: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
答案 2 :(得分:2)
在我创建了一个新的group.xml并使用它而不是现有的
之后,它工作了答案 3 :(得分:2)
我在父视图中使用了一些可点击的组件(如Checkbox,ToggleButton,ImageButton ......),然后点击事件不会被触发。
您只需在适配器中设置getGroupView
,然后单击convertView for listeView。
答案 4 :(得分:0)
我知道这是一个老问题,但我最近从我的程序中收到了同样的问题。我的ExpandableListView没有响应,点击了组点击事件。因此,我没有实现ExpandableListView.OnItemClickListener,而是实现了ExpandableListView.OnGroupClickListener,它就像魅力一样。希望这能帮助后来收到此问题的人。
答案 5 :(得分: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等的单击事件。
答案 6 :(得分:-1)
将android:descendantFocusability="blocksDescendants"
添加到您正在膨胀的任何不再接收触摸事件的基本布局中。