我想创建一个带有标题视图的ListView
,可以像ExpandableListView
一样展开和重新调整(但只是标题视图,所有其他视图只是是正常的清单项目。)
我正在使用ExpandableListView
和BaseExpandableListAdapter
,并将列表中的所有其他项视为没有子项的组。
这很麻烦且容易出错并且具有不希望的副作用。
当点击标题视图时,我还尝试使用普通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()
各种观点,但都无济于事。
关于如何解决这一问题的任何想法?
答案 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;
}
}
您还需要覆盖onGroupExpanded
和onGroupCollapsed
来更改标题的图像(如果当然点击了标题)。
最后,您需要覆盖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。
希望这会有所帮助。祝你好运!