如何识别在Recycler视图android中最顶层加载的布局

时间:2017-09-13 14:47:46

标签: java android android-recyclerview

我正在使用包含三种不同布局的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值。

由于

1 个答案:

答案 0 :(得分:0)

您可以像这样获取第一个可见项目的位置:

int firstVisibleItem = ((LinearLayoutManager)recyclerView.getLayoutManager()).findFirstCompletelyVisibleItemPosition();

现在使用getItemViewType方法检索它的类型,或者实现一个方法来检索布局标​​识符,就像您为类型

所做的那样

要查看您可以使用的顶部位置:

View view =((LinearLayoutManager)recyclerView.getLayoutManager()).findViewByPosition(firstVisibleItem);