基本上,我正在尝试实现与所附照片相似的功能。动物类别列表(垂直滚动),其中包含一些动物列表(水平滚动),每张动物卡片中都有描述列表(水平滚动)。
我没有使用任何ScrollView,只是使用了三个RecyclerView中的给定滚动。
我想滚动橙色卡片和照片卡片动物以保持固定。但是滚动仅可移动动物牌,而不能移动橙色牌。如果我为每张橙色卡片都设置了一个点击监听器,它将把我发送到给定的屏幕。
我看到水平滚动里面的水平滚动可以在其他应用程序上运行,因此可以实现,但是我想我错过了一些东西。
我也以多种形式看到了这个问题,但似乎没有答案。
假设我有三个包含它们的类:
AnimalCategory-动物的名称和清单
动物-照片,文字和描述列表
说明-属性字段
活动中:
...
animalsAdapter.addCategory(new AnimalCategory(
animalCategoryList.get(i).getName(),
animalCategoryList.get(i).getAnimals()));
animalsRecyclerView.setAdapter(animalsAdapter);
...
在AnimalsCategoryAdapter中:
holder.categoryTextView.setText(categoryName);
holder.categoriesRecyclerView.setLayoutManager(new LinearLayoutManager(holder.categoriesRecyclerView.getContext(), LinearLayoutManager.HORIZONTAL, false));
holder.categoriesRecyclerView.setAdapter(new AnimalsAdapter(animalsCategory.getAnimals(), context));
在AnimalsAdapter中:
holder.categoriesRecyclerView.setLayoutManager(new LinearLayoutManager(holder.categoriesRecyclerView.getContext(), LinearLayoutManager.HORIZONTAL, false));
holder.categoriesRecyclerView.setAdapter(new AnimalAdapter(animalCategory.getAnimals(), context);
在说明中:
Description description = descriptionList.get(position);
holder.propertyTextView.setText(description.getProperty());
答案 0 :(得分:1)
在定义水平recyclerview的位置(假设descriptionRecyclerView
)添加到下面。当触摸该recyclerview区域时,它将省略父recyclerview的滚动,并控制滚动。
RecyclerView.OnItemTouchListener mScrollTouchListener = new RecyclerView.OnItemTouchListener() {
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
int action = e.getAction();
switch (action) {
case MotionEvent.ACTION_MOVE:
rv.getParent().requestDisallowInterceptTouchEvent(true);
break;
}
return false;
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) { }
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) { }
};
descriptionRecyclerView.addOnItemTouchListener(mScrollTouchListener);
答案 1 :(得分:0)
那是一个糟糕的用户体验, 很多嵌套的滚动视图都很难与之交互,
您应该在不同的屏幕中拆分数据, 或者只是减少按布局显示的数据,所以您无需滚动, 然后在用户单击并再次打开新的详细信息屏幕时再次显示详细信息
或者您可以使用扩展列表项显示更多数据