如何在android中的expandablelistview中查看组?

use*_*542 5 android expandablelistview

即时通讯,我的英语不好.

所以..我需要在expandablelistview中获取组的视图,以通过view.getTag()方法获取对象标记.

在这个例子中关注我:

 ExpandableListView

    --> group (i need this view)
    ----> child
    ----> child
    ----> child

    --> group (i need this view)
    ----> child
    ----> child
Run Code Online (Sandbox Code Playgroud)

我的代码:

    @Override
public boolean onChildClick(final ExpandableListView parent, final View v,
        final int groupPosition, final int childPosition, final long id) {

        /* I NEED GET VIEW OF GROUP FOR GET YOUR TAG*/

        View vParent = parent.getChildAt(groupPosition); // dont work after first group 
        Programa v2 = (Programa) parent.getTag(); // return null

        // v parameter is a child of group

    return true;
}
Run Code Online (Sandbox Code Playgroud)

在我的适配器中:

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

    TwoLineListItem view = (TwoLineListItem) LayoutInflater.from(contexto)
            .inflate(android.R.layout.simple_expandable_list_item_2,
                    parent, false);

    String programa = map.keySet().toArray(new String[map.keySet().size()])[groupPosition];

    view.getText1().setText(programa);
    view.getText2().setText("PROGRAMA LOCAL");

    view.setTag(programas.get(groupPosition)); // i need get this in child click listener

    return convertView = view;
}
Run Code Online (Sandbox Code Playgroud)

任何的想法?谢谢

aho*_*der 13

要从ExpandableListView获取组视图,请执行以下操作:

public View getGroupView(ExpandableListView listView, int groupPosition) {
  long packedPosition = ExpandableListView.getPackedPositionForGroup(groupPosition);
  int flatPosition = listView.getFlatListPosition(packedPosition);
  int first = listView.getFirstVisiblePosition();
  return listView.getChildAt(flatPosition - first);
}
Run Code Online (Sandbox Code Playgroud)

  • 你在哪里使用packedPosition?在我看来,它是未使用的! (2认同)

Kas*_*rdi 1

如果您的代码正确,您希望获取子级的组视图,以便可以对其调用 getTag(),对吗?

如果是这样,为什么不直接跳过该步骤并访问手动设置的标签值programas.get(groupPosition)

您可以通过致电来做到这一点:

programas.get(groupPosition)就在您的方法的顶部,onChildClick因为您也在那里获得了组位置值。

编辑回应您的评论:

这里的问题是,您将无法通过适配器获取组的视图,因为它可能涉及由于列表中视图的回收而重新创建视图。如果此方法不起作用,我强烈建议修改您的代码以使其起作用。

如果programas是适配器的输入之一,则调用getGroup(groupPosition)适配器来访问它。否则,在适配器类中创建一个公共方法以允许检索该值。