有没有人有运气适应PinnedHeaderListView以便它可以与ExpandableListView一起使用而不仅仅是一个带索引部分的简单ListView?我基本上想要一个ExpandableListView
,其中每个组项视图保持固定在顶部,直到它被下一个组视图向上推。
我研究过代码,试图找出PinnedHeaderListView
是如何工作的,似乎很难适应ExpandableListView
。主要问题似乎在于使用不同类型的适配器和绘图方法。 PinnedHeaderListView
使用SectionIndexer
来跟踪部分位置。当它用getView()
绘制每个项目时,它会检查项目是否是新部分的开头。如果该项目是新部分的开头,则会在项目的list_item
视图中显示 部分标题。 ExpandableListAdapter
有一个getChildView()
和一个getGroupView()
可以将项目和部分分别绘制为不同的列表项。
我确信必须有一些方法可以使用PinnedHeaderListView
中的方法在ExpandableListView
中获得类似的行为,但我不知道从哪里开始。
答案 0 :(得分:4)
我能够在ExpandableList1 APIdemo上获得固定标题。
我遇到的最困难的问题是弄清楚如何让SectionIndexer与扩展列表很好地配合。正如我的问题所证明的那样,我认为这一切都是错的。在我最初尝试解决这个问题时,我在MyExpandableAdapter中创建了一个SectionIndexer对象并将其映射到我的数据,类似于在Contacts应用程序和Peter的例子中完成的操作。这适用于“联系人”应用,因为平面列表位置与数据集静态匹配。在可扩展列表视图中,随着组的扩展和扩展,平面列表位置会发生变化。
因此,解决方案是不将节索引器映射到数据,而是映射到ExpandableListView的实例。使用此解决方案,您甚至不需要示例中使用的SectionIndexer对象。您只需要围绕ExpandableListView方法包装SectionIndexer实现方法,如下所示:
@Override
public int getPositionForSection(int section) {
return mView.getFlatListPosition(ExpandableListView
.getPackedPositionForGroup(section));
}
@Override
public int getSectionForPosition(int position) {
return ExpandableListView.getPackedPositionGroup(mView
.getExpandableListPosition(position));
}
当然,为了让这一切全部有效,你必须做出其他改变,但上述方法才是关键。我会将完整的代码发布到谷歌代码或github,并很快从这里链接。带有固定标题的ExpandableLists看起来很棒!
答案 1 :(得分:2)
我已经完成了 3 步骤:
1。在 build.gradle
中添加compile 'com.diegocarloslima:fgelv:0.1.+@aar'
2. 在xml中添加 ExpandableListView 。
<com.diegocarloslima.fgelv.lib.FloatingGroupExpandableListView
android:id="@+id/expandableListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:groupIndicator="@null" />
3。 Java代码:
FloatingGroupExpandableListView expandableListView = (FloatingGroupExpandableListView) findViewById(R.id.expandableListView);
MyexpandableListAdapter adapter = new MyexpandableListAdapter(context, mList);
WrapperExpandableListAdapter wrapperAdapter = new WrapperExpandableListAdapter(adapter);
expandableListView.setAdapter(wrapperAdapter);
希望这会对你有所帮助。