我有一个父回收站视图,里面有3个子视图。孩子的最后两个是recyclerview。
$(document).on('keypress',function(e){
if(e.keyCode === 49){
$('#form1').submit();
}
})
问题是,每当此片段可见时,它会自动滚动以与Parent recyclerview
- child view 1
- child view 2 (horizontal rv)
- child view 3 (horizontal rv)
的底部对齐。
我已将父rv设置为侦听滚动。这就是我最终的结果:
child view 2
似乎父回收者视图的起始dy: 108
dy: 72
dy: 75
dy: 62
dy: 48
dy: 42
dy: 34
dy: 27
dy: 22
dy: 16
dy: 12
dy: 10
dy: 7
dy: 5
dy: 3
dy: 3
dy: 1
dy: 1
dy: 1
设置为dy
到0
rv。它上面的一切都是-ve值。但是,我不确定是否是这种情况,因为我仍然在找出导致它的原因。
任何修复?
答案 0 :(得分:126)
我们遇到了类似的问题。我们有一个垂直RecyclerView
。此垂直RecyclerView
的每个项目都包含水平RecyclerView
,就像在Android TV应用中一样。
当我们将支持库从23.4.0升级到24.0.0时,突然出现了自动滚动。特别是,当我们打开Activity
然后我们返回时,垂直RecyclerView
向上滚动,以便当前水平RecyclerView
行不会被切断并且行完全显示。 / p>
有一个简单的解决方法。将其添加到外部/父级 RecyclerView
:
android:descendantFocusability="blocksDescendants"
我在这个问题中找到了解决方案:
此外,我找到another solution,这也有效。在我们的例子中,垂直RecyclerView
包含在FrameLayout
中。如果我将android:focusableInTouchMode="true"
添加到此FrameLayout
,则问题就会消失。
顺便说一下,还有一个open issue on the AOSP。
答案 1 :(得分:3)
setFocusable()
中false
,它就不再关注那个视图了。片段是可见的。
就我而言,我必须在从API加载数据后以编程方式设置它。
答案 2 :(得分:3)
经过长时间的搜索后,我开始关注设置为true的参数reverseLayout
。我换了
horizontalRV.setLayoutManager(
new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, true));
与
horizontalRV.setLayoutManager(
new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
答案 3 :(得分:2)
试试这个android:descendantFocusability="blocksDescendants"
。它解决了我的问题。
答案 4 :(得分:0)
对@albertvilacalvo答案的简短提示: 如果以编程方式使用RecyclerView,则可以通过这种方式处理setFocusableInTouchMode(包含在RecyclerView类中)
@Override
protected void onAttachedToWindow() {
((View) getParent()).setFocusableInTouchMode(true);
super.onAttachedToWindow();
}
如果您在子视图中需要EditText,则descendantFocusability解决方案将失败,它们将不再获取光标。我在我的RecyclerView子项中使用ListView,自定义(多)触摸和EditText。到目前为止,没有使用setFocusableInTouchMode的副作用。
答案 5 :(得分:0)
仅在oncreate中初始化布局管理器,或者仅在1次中不重新初始化它 recyclerview.setLayoutManager(new LinearLayoutManager(context));
答案 6 :(得分:0)
如果您嵌套了ConstraintLayout
,请尝试摆脱RecyclerView
。
我刚刚将ConstraintLayout
替换为旧的LinearLayout
,不需要的滚动消失了!
希望这可能对某人有所帮助:)