我正在使用包含三种不同布局的recyclerview。我使用getItemViewType()编写了三个布局的通用适配器,我的recyclerview工作正常。现在我想在顶部显示布局的标题(无论是1还是2)作为STICKY HEADER。
我在frameLayout下添加了Textview以充当StickyHeader。
在我的适配器中,我在getItemViewType方法中将静态字符串值设置为“Layout one”或“Layout two”以从活动中获取值。
public static String title_sticky="";
@Override
public int getItemViewType(int position) {
if (items.get(position) instanceof Movie) {
title_sticky="LAYOUT ONE";
return MOVIE;
} else if (items.get(position) instanceof Movie1) {
title_sticky="LAYOUT TWO";
return MOVIE1;
}/*else if (items.get(position) instanceof Blockbuster ) {
return BLOCKBUSTER ;
}*/
return -1;
}
现在在活动中,
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
stickyText.setText(ComplexRecyclerViewAdapter.title_sticky);
}
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
stickyText.setText(ComplexRecyclerViewAdapter.title_sticky);
}
});
On addOnscrollListener and onScrolled method of recyclerview, i am just getting the stickystring value from Adapter and setting it to StickyHeaderText.
现在,问题是每当滚动时第二个布局的第一个项目在我的recyclerview底部可见,Stickytitle会更改为“布局二”。
如何识别在Recycler视图中最顶层加载的布局,以便我可以根据该值填充我的stickyheader值。
由于
答案 0 :(得分:0)
您可以像这样获取第一个可见项目的位置:
int firstVisibleItem = ((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
现在使用getItemViewType
方法检索它的类型,或者实现一个方法来检索布局标识符,就像您为类型
要查看您可以使用的顶部位置:
View view =((LinearLayoutManager)recyclerView.getLayoutManager()).findViewByPosition(firstVisibleItem);