RecyclerView (горизонтальный) внутри RecyclerView (горизонтальный) внутри RecyclerView (вертикальный) - PullRequest
0 голосов
/ 25 октября 2018

enter image description here

В основном я пытаюсь добиться чего-то похожего на фотографию.Список категорий животных (вертикальная прокрутка), который находится внутри некоторых списков животных (горизонтальная прокрутка) и в каждой карточке животных есть список описаний (горизонтальная прокрутка).

Я не использую никаких ScrollViews, простоданный свиток от трех RecyclerViews.

Я хочу прокрутить оранжевые карточки и фотокарточку животного, чтобы она оставалась неподвижной.Но свиток работает только для перемещения карт животных, а не оранжевых карт.Если я установлю прослушиватель щелчков для каждой оранжевой карты, он отправит меня на заданный экран.

Я видел этот горизонтальный свиток внутри горизонтального свитка, работающий с другими приложениями, поэтому его можно достичь, но, думаю, я пропустилчто-то.

Также я видел этот вопрос во многих формах, но, похоже, ни один ответ не работает.

Допустим, у меня есть три класса с их содержимым:

AnimalCategory - nameи список животных

Животное - фото, текст и список описаний

Описание - поле свойства

В деятельности:

...

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 голосов
/ 25 октября 2018

Это плохой UX, с множеством вложенных видов прокрутки очень сложно взаимодействовать,

Вы должны либо разделить данные на разных экранах, либо просто сократить данные, которые вы показываете для каждого макета, чтобы вы не сталипридется прокрутить, затем показать его снова в деталях, когда пользователь нажимает и открывает новый экран подробностей

Или вы можете использовать элемент расширяемого списка, чтобы показать больше данных

0 голосов
/ 25 октября 2018

Там, где вы определяете горизонтальное представление переработчика (скажем, descriptionRecyclerView), добавьте ниже.При этом не будет прокрутки для родительского просмотра переработчика при прикосновении к этой области просмотра и будет осуществляться управление прокруткой.

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);
...