如何使用网格布局管理器将视图带到recyclerview的顶部?

时间:2019-07-16 19:31:18

标签: android android-recyclerview gridlayoutmanager

当我成为焦点时,我正在尝试以编程方式将视图带到我的recyclerview的顶部。

当我使用scrollToPosition方法时,它不会将视图带到视图的顶部。这样,下面的视图将成为焦点。

我尝试使用scrollToPositionWithOffset方法,但由于使用GridLayoutManager而不是LinearLayoutManager而无法使用。

我还尝试过以编程方式手动滚动recyclerview,但是边缘情况过多,看起来很时髦。

private boolean jumpToNext(){
    if (mRecyclerView != null){
        ArrayList<View> views = new ArrayList<>();
        ArrayList<Integer> positions = new ArrayList<>();

        for(int i = 0; i < mRecyclerView.getLayoutManager().getItemCount(); i++){
            if(mRecyclerView.getLayoutManager().getChildAt(i) != null){
                views.add(mRecyclerView.getLayoutManager().getChildAt(i));
                positions.add(i);
            }
        }

        for(int i = 0; i < views.size(); i++) {
            if (views.get(i).hasFocus()) {
                for (int j = i + 1; j < views.size(); j++) {
                    ArrayList<View> newView = new ArrayList<>();
                    for(View v : views.get(j).getFocusables(View.FOCUS_RIGHT)){
                        if(v instanceof EditText){
                            mRecyclerView.getLayoutManager().scrollToPosition(positions.get(j));
                            views.get(j).requestFocus();
                            j = views.size();
                            i = views.size();
                        }
                    }
                }
            }
        }
        return true;
    }
    return false;
}

当一个视图成为焦点时,应将其移至最高位置,以便其下面的其他视图变得可聚焦。

0 个答案:

没有答案