Android ExpandedListView获取组位置

时间:2016-08-04 15:38:36

标签: android

我有一个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可能是答案,但它似乎是一个重量级的解决方案。

你怎么能找出当前的组行是什么?

詹姆斯

1 个答案:

答案 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");
               }
            }
        });