具有可扩展标题视图的ListView

时间:2014-08-29 08:59:23

标签: android android-listview

我想创建一个带有标题视图的ListView,可以像ExpandableListView一样展开和重新调整(但只是标题视图,所有其他视图只是是正常的清单项目。)

我正在使用ExpandableListViewBaseExpandableListAdapter,并将列表中的所有其他项视为没有子项的组。 这很麻烦且容易出错并且具有不希望的副作用。

当点击标题视图时,我还尝试使用普通ListView和标题视图,其中我setVisivility(View.VISIBLE)到视图的展开部分,但这似乎没有效果:

private View getHeaderView() {

    final View v = layoutInflater.inflate(R.layout.headertest, null);

    View v1 = v.findViewById(R.id.view1);

    final View v2 = v.findViewById(R.id.view2);

    v1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Log.d("head", "click");
            v2.setVisibility(View.VISIBLE);
            notifyDataSetChanged();

        }
    });

    return v;

}

点击v1后,v2的可见性不会更改,但会调用clickListener。我也尝试了.invalidate()各种观点,但都无济于事。

关于如何解决这一问题的任何想法?

1 个答案:

答案 0 :(得分:2)

您可以使用展开式列表视图执行此操作。首先禁用ListView上的指示符(打开/关闭图标):

mExpList.setIndicator(null);

接下来,您的标题(第一组)必须是一种特殊类型的组,其布局中包含图像(指示符)。基本上你想要有两种类型的组视图:

@Override
public int getGroupTypeCount() {
    return 2;
}

@Override
public int getGroupType(int groupPosition) {
    if (groupPosition == headerPosition) {
        return 1;
    } else {
        return 0;
    }
}

您还需要覆盖onGroupExpandedonGroupCollapsed来更改标题的图像(如果当然点击了标题)。

最后,您需要覆盖ListView的OnGroupClickListener:

    mExpList.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
        @Override
        public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
            if (groupPosition == header) {

                // Click was not handled
                return false;
            } else {
                // Do some normal stuff with items
                // Click was handled group won't be (or tried to be) expanded
                return true;
            }
        }
    });

另一个好主意是覆盖适配器getChildCount,当它不是标题时返回0。

希望这会有所帮助。祝你好运!