gpt4 book ai didi

java - 回收站 View : Disable scrolling caused by change in focus

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:28:36 25 4
gpt4 key购买 nike

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


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

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

  • https://stackoverflow.com/a/8101614/4077294 ,但带有 RecyclerView.OnItemTouchListener。我在 onInterceptTouchEvent 中调用了 recyclerView.requestFocusFromTouch

    • 行为:一直滚动到点击的 EditText 的顶部。
  • 从任何 EditText 中清除焦点,无论何时,通过

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

完全禁用滚动,如 this question这是 Not Acceptable ,因为我仍然希望用户能够滚动。

最佳答案

我最终得到了来自@pskink 的这个解决方案:

recylerView.setLayoutManager(new LinearLayoutManager(this) {
@Override
public boolean requestChildRectangleOnScreen(RecyclerView parent, View child, Rect rect, boolean immediate) {
return false;
}
});

它似乎工作得很好,但是@pskink 已经提到在使用箭头键时这可能会出现问题。他在这里发布了另一个解决方案:https://pastebin.com/8JLSMkF7 .如果您对上述解决方案有疑问,可以尝试链接中的替代解决方案。现在,我坚持使用刚刚发布在这里的那个。

更新

自 support-library v25.3.0 起,您还应该覆盖另一个 requestChildRectangleOnScreen LayoutManager 中的方法:

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

关于java - 回收站 View : Disable scrolling caused by change in focus,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44993103/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com