我在ScrollView中实现了一个RecyclerView.为了在整个页面上只有一个滚动行为,我实现了NonScrollRecyclerView版本.实施如下:
public class NonScrollRecyclerView extends RecyclerView {
public NonScrollRecyclerView(Context context) { super(context); }
public NonScrollRecyclerView(Context context,AttributeSet attrs) {
super(context,attrs);
}
public NonScrollRecyclerView(Context context,AttributeSet attrs,int defStyle) {
super(context,attrs,defStyle);
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev){
if(ev.getAction() == MotionEvent.ACTION_MOVE)
return true;
return super.dispatchTouchEvent(ev);
}
}
一旦我将构建和目标设置更新到SDK 23,我就无法滚动包含NonScrollRecyclerView的页面.具体问题是页面滚动正常,直到我到达回收站视图部分,一旦我滚动到此视图,我无法向上或向下滚动.
我不喜欢SDK 22及以下版本
我的xml如下:
XML @ layout / rv包含recycleler视图
Feeds"
android:layout_marginTop="8dp"/>
XML – @ layout / rv
Feeds">
Feedcount"
android:textColor="@color/semi_theme_blue"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginLeft="12dp"
android:layout_centerVertical="true" />
最佳答案
不建议在ScrollView中使用RecyclerView和ListView,因为在渲染ScrollView时不会计算元素高度.这意味着,在显示ScrollView时可能不会填充适配器,稍后当RecyclerView收到有关数据更改的通知时(例如,当您初始化适配器时),则无法重新计算元素高度.
这真的是一个痛苦的因为你必须尝试计算元素高度并且它永远不准确,所以当你在ScrollView中显示ListView或RecyclerView时会有差异.可以检查here和here如何计算元素高度的一些示例.
我的建议是将您的RecyclerView转换为LinearLayout并以编程方式添加元素,以便模拟ListView或RecyclerView行为:
LinearLayout layout = (LinearLayout) rootView.findViewById(R.id.files);
layout.removeAllViews();
for (int i = 0; i < fileAdapter.getCount(); i++) {
final View item = fileAdapter.getView(i,null,null);
item.setClickable(true);
item.setId(i);
item.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
fileContentRowPosition = v.getId();
# Your click action here
}
});
layout.addView(item);
}
这里是带有文件定义的XML:
另一方面,如果您仍想继续执行实施,并且有关您的问题,可以查看本文关于Handling Scrollable Controls in Scrollview
最好的祝福,