Правильно ли я делаю (ViewPager и RecyclerView)

423
30 января 2017, 16:50

Просьба помочь с алгоритмом действий. Есть DrawerLayout по нажатию на его пункт отрывается фрагмент-1 в котором присутствует RecyclerView который выводит список пунктов. По нажатию пункта открывается новый фрагмент-2 в котором присутствует:

<android.support.design.widget.TabLayout
    android:id="@+id/tabs"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabGravity="fill"
    app:tabMode="scrollable" />
<android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
</android.support.v4.view.ViewPager>

и в котором адаптеру ViewPager передается название вкладок и количество создаваемых фрагментов

ViewPagerPhraseAdapter adapter = new ViewPagerPhraseAdapter(getFragmentManager());
    for (int i = 0; i < tabList.length; i++) {
        adapter.addFragment(new PhraseFragmentTabPager(), tabList[i]);
    }
    viewPager.setAdapter(adapter);

соответственно есть и фрагмент-3 (тот который показывает содержимое вкладок)

<android.support.v7.widget.RecyclerView
    android:id="@+id/recycler_phrase_view"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scrollbars="vertical" />

в котором адаптеру RecyclerView передается сгенерированный в коде фрагмента-3 список listItems показа исходя из названия текущей вкладки и в нем же обрабатываются нажатия на элементы списка.

Правильно ли генерировать список listItems в фрагменте-3 и обрабатывать нажатия в нем же?

В ответ на первый комментарий: Дело в том, что мой алгоритм обработки нажатий на элементы RecyclerView базируется на использовании списка показа listItems, который генерируется в фрагменте-3, я получаю при нажатии на элемент его position в текущем отображении, потом вытягиваю из базы значения для обработки:

recyclerPhraseAdapter.setOnItemClickListener(new RecyclerPhraseAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(View itemView, int position, View v) {
            PhrasebookDatabase phrase = PhrasebookDatabase.findById(PhrasebookDatabase.class, listItems.get(position).getSequenceNumber()); // это мы получаем
            switch (v.getId()) {
                case R.id.starImageView:
                        phrase.setFavourites(false);
                    break;
                case R.id.shareImageView:
                    openShareDialog(position);
                    break;
                case R.id.phraseLinearLayout:
                        phrase.setHistory(true);
                    break;
            }
        }
    });

И я получаю для себя проблему, так как я использую ViewPager то он генерирует для показа несколько экранов, и получается что на экране я вижу один список, но в использовать его не могу, так как ViewPagerсгенерировал уже список listItems для следующего экрана. И у меня выходит, что я при нажатии на элемент списка на текущем экране, получаю данные для элемента списка со следующего экрана. Как то так!.

READ ALSO
Прерывание цикла for с помощью break это плоxo?

Прерывание цикла for с помощью break это плоxo?

И снова я со своей книгой "Для про"Почему в цикле for не рекомендуется прерывание с помощью break? Как же тогда это сделать?

312
Кастомные кнопки bxslider

Кастомные кнопки bxslider

Не получается настроить свои кнопки для переключения слайдов в bxslider, а точнее иконки с FontAwesomeНеобходимо их сделать по центру слайда с отступами...

510
Получить значение радиокнопки

Получить значение радиокнопки

Есть такая верстка

388
Проблема с подключением класа

Проблема с подключением класа

Значит стандартный код, для старта софта

312