Java RecyclerView:禁用焦点更改导致的滚动

Java RecyclerView:禁用焦点更改导致的滚动,java,android,android-recyclerview,android-edittext,focus,Java,Android,Android Recyclerview,Android Edittext,Focus,TL;DR我有一个RecyclerView的EditTexts。当用户关注EditText#1并点击EditText#2时,我希望EditText#2获得焦点,但我不希望ReyclerView滚动。我怎样才能做到这一点 我正在尝试使用一个RecyclerView,其中填充了一堆EditTexts。当我专注于一个EditText并单击另一个时,RecyclerView会滚动,以便第二个位于屏幕顶部。我想从RecyclerView中禁用此自动滚动,但我仍然希望用户能够滚动,并且我仍然希望第二个Ed

TL;DR我有一个
RecyclerView
EditText
s。当用户关注
EditText#1
并点击
EditText#2
时,我希望
EditText#2
获得焦点,但我不希望
ReyclerView
滚动。我怎样才能做到这一点


我正在尝试使用一个
RecyclerView
,其中填充了一堆
EditText
s。当我专注于一个
EditText
并单击另一个时,
RecyclerView
会滚动,以便第二个位于屏幕顶部。我想从
RecyclerView
中禁用此自动滚动,但我仍然希望用户能够滚动,并且我仍然希望第二个
EditText
能够集中,以便用户可以开始键入。我怎样才能做到这一点

我已经尝试了以下解决方案:

  • ,但使用的是一个
    RecyclerView.OnItemTouchListener
    。我在InterceptTouchEvent中调用了
    recyclerView.requestFocusFromTouch

    • 行为:一直滚动到点击的
      EditText
      的顶部
  • 无论何时聚焦在任何
    EditText
    上,都可以通过

    editText.setOnFocusChangeListener(new OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, bool hasFocus) {
            if (hasFocus) {
                v.clearFocus();
            }
        }
    });
    
    • 行为:键盘从未出现,而
      RecyclerView
      仍滚动到顶部

在中完全禁用滚动是不可接受的,因为我仍然希望用户能够滚动。

我最终从@pskink获得了此解决方案:

recylerView.setLayoutManager(new LinearLayoutManager(this) {
    @Override
    public boolean requestChildRectangleOnScreen(RecyclerView parent, View child, Rect rect, boolean immediate) {
        return false;
    }
});
它似乎工作得很好,但是@pskink提到在使用箭头键时可能会出现问题。他在这里发布了另一个解决方案:。如果您对上述解决方案有问题,可以在链接处尝试其他解决方案。现在,我坚持我刚刚发布的那篇文章

更新

由于支持库v25.3.0,您还应该覆盖LayoutManager中的另一个方法:

@Override
public boolean requestChildRectangleOnScreen(RecyclerView parent, View child, Rect rect, boolean immediate, boolean focusedChildVisible) {
    return false;
}

RecyclerView将滚动至焦点项目。 尝试recyclerView.setFocusable(false)。
这对我很有用。

试试这个:android:WindowsofInputMode=“adjustNothing | stateHidden”在Manifests中你能发布对你有用的吗?我也很想知道。@HBrooks还没有答案。请参见屏幕上的
requestchildrectangle
您可以在视图或布局管理器中覆盖它level@pskink你能举一个我将如何使用它的例子吗?