我在一个循环系统中工作,其中包括三种不同的布局。我使用getItemViewType()为三个布局编码了一个常见的适配器,并且我的recyclerview效果很好。现在,我想以粘性标头显示布局标题(无论是1还是2)。
我在framelayout下添加了一个文本视图,以充当粘性。
在我的适配器中,我将静态字符串值设置为"布局一个"或getItemViewType方法中的"一个"或"布局两个",以从活动中获取值。
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.
现在,我的问题是,每当第二个布局的第一个项目在滚动时在我的回收瓶的底部可见时,stickytitle就会更改为"布局两个"。
如何在回收器视图中最大的位置识别哪个布局在顶部加载,以便我可以根据该范围填充我的粘性标题值。
谢谢
您可以获取第一个可见项目的位置:
int firstVisibleItem = ((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();
现在,使用您的getItemViewType
方法检索它的类型,或实现一种方法,该方法像您为类型
以获取可以使用的最高位置的视图:
View view =((LinearLayoutManager)recyclerView.getLayoutManager()).findViewByPosition(firstVisibleItem);