我有一个ExpandedListView
,其中包含一个包含标签和按钮的组。
在getGroupView
的{{1}}方法中,我设置按钮以接受按钮上的点击
ExpandedListAdapter
在public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
convertView = LayoutInflater.from(activity).inflate(R.layout.group_row, parent, false);
viewHolder = new ViewHolder();
viewHolder.name = (TextView)convertView.findViewById(R.id.name);
viewHolder.editButton = (Button) convertView.findViewById(R.id.edit_button);
convertView.setTag(viewHolder);
viewHolder.editButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
long pos = ListAdapter.this.listView.getSelectedItemPosition();
Timber.i("Position "+pos);
}
}
else {
viewHolder = (ChatViewHolder) convertView.getTag();
}
}
方法中,如何找出当前所选组行的内容? Button onClick中对listView的onClick
的调用返回-1。 getSelectedItemPostion
变量为0,因为groupPosition
始终与ViewHolder
初始化时创建的ViewHolder
相同。
我尝试使用convertView
正确计算了行,但只有在我点击标签时才会触发,而不是在我点击按钮时触发。
OnGroupClickListener
我想为每个组行设置一个viewHolder而不是为所有组行共享viewHolder可能是答案,但它似乎是一个重量级的解决方案。
你怎么能找出当前的组行是什么?
詹姆斯
答案 0 :(得分:0)
ExpandableListView
使用名为打包位置的内容在平面列表和分层列表之间进行。
我不认为ExpandableListView
有选择群组的概念(请参阅ExpandableListAdapter.isChildSelectable(int groupPosition, int childPosition)
。我认为您只能选择一个孩子。但是,让我们看看代码说的是什么:
viewHolder.editButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
long packedPos = ListAdapter.this.listView.getSelectedPosition();
if (packedPos != ExpandableListView.PACKED_POSITION_VALUE_NULL) {
int groupPos, childPos;
int packedPosType = ListAdapter.this.listView.getPackedPositionType(packedPos);
switch (packedPosType) {
case ExpandableListView.PACKED_POSITION_TYPE_NULL:
Timber.i("packed position type was null ???");
break;
case ExpandableListView.PACKED_POSITION_TYPE_GROUP:
groupPos = ListAdapter.this.listView.getPackedPositionGroup(packedPos);
Timber.i("groupPosition "+ groupPos);
break;
case ExpandableListView.PACKED_POSITION_TYPE_CHILD:
groupPos = ListAdapter.this.listView.getPackedPositionGroup(packedPos);
childPos = ListAdapter.this.listView.getPackedPositionChild(packedPos);
Timber.i("groupPosition "+ groupPos + ", childPosition " + childPos);
break;
}
} else {
Timber.i("no selection");
}
}
});