5

我是 blazilian 所以,我的英语不好。

所以.. 我需要在 expandablelistview 中查看组的视图,以便通过 view.getTag() 方法获取您的对象标签。

在这个例子中跟着我:

 ExpandableListView

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

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

我的代码:

    @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;
}

在我的适配器中:

    @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;
}

任何想法?谢谢

4

4 回答 4

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);
}
于 2015-05-06T21:28:46.040 回答
1

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

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

你可以通过调用来做到这一点:

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

编辑以回应您的评论:

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

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

于 2013-10-01T19:45:52.637 回答
1

我尝试了 AedonEtLIRA 答案,但它只获得了列表中的第一项。

我的解决方案是在我的适配器的 getGroupView 方法中设置一个标签。

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

    if (convertView == null) {
        LayoutInflater layoutInflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.listitem_group, null);
    }

    //This is your data object that you might be using for storage that can be returned by your getGroup(groupPosition) function
    GroupDataDto groupDataDto = (GroupDataDto) getGroup(groupPosition);
    String name = groupDataDto.getName();
    convertView.setTag(name);
...

现在在您的片段/活动中,在您的 onGroupExpand 和 onGroupCollapse 中:

    GroupDataDto groupDataDto = (GroupDataDto) listAdapter.getGroup(groupPosition);
    ImageView arrow = (ImageView) getView().findViewWithTag(groupDataDto.getName()).findViewById(R.id.expandable_arrow_down);

然后我可以在箭头上制作动画,这就是我想要获得该组视图的原因。

于 2017-01-19T13:46:14.087 回答
-2

好吧,我使用以下代码访问组中的 TextView:

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

    View vParent = mAdapter.getGroupView(groupPosition, true, null, null); 
    Programa v2 = (Programa) vParent.getTag(); 

return true;

}

我希望它有帮助

于 2014-12-31T17:14:35.110 回答