RecyclerView(水平)里面RecyclerView(水平)里面RecyclerView(垂直)

时间:2018-10-25 11:39:07

标签: android android-recyclerview horizontal-scrolling

enter image description here

基本上,我正在尝试实现与所附照片相似的功能。动物类别列表(垂直滚动),其中包含一些动物列表(水平滚动),每张动物卡片中都有描述列表(水平滚动)。

我没有使用任何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());

2 个答案:

答案 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)

那是一个糟糕的用户体验, 很多嵌套的滚动视图都很难与之交互,

您应该在不同的屏幕中拆分数据, 或者只是减少按布局显示的数据,所以您无需滚动, 然后在用户单击并再次打开新的详细信息屏幕时再次显示详细信息

或者您可以使用扩展列表项显示更多数据