Просмотр пейджера внутри фрагмента

У меня есть нижняя панель навигации, реализованная с пейджером просмотра. Теперь в первом фрагменте мне нужны вкладки вверху, поэтому мне нужен пейджер только внутри этого фрагмента. Этот пейджер представления будет иметь свой собственный набор фрагментов. Является ли это возможным? Может ли кто-нибудь помочь мне сделать это?


person Aakash Shah    schedule 23.06.2017    source источник


Ответы (4)


Да, это вполне возможно, так как ваш внутренний viewpager и tablayout будут независимы от своего родительского фрагмента. Процесс для достижения этого точно такой же, как вы использовали для создания своего первого набора вкладок, но вместо этого вы должны использовать getChildFragmentManager():

getChildFragmentManager().beginTransaction().add(R.id.yourinnercontainer, YourFragment.newInstance()).commit();
getChildFragmentManager().executePendingTransactions();

А для TabLayout просто создайте свои представления и используйте функцию setupWithViewPager(viewPager), как обычно.

person Noctis Drakon    schedule 23.06.2017

Да, вы можете добавить viewPager в XML вашего фрагмента следующим образом:

<android.support.design.widget.AppBarLayout
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layoutDirection="ltr"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:contentInsetEnd="16dp"
        app:popupTheme="@style/AppTheme.PopupOverlay">

        <TextView
            android:id="@+id/toolbar_title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="start|center_vertical"
            android:gravity="center|start"
            android:text="@string/app_name"
            android:textAppearance="@style/TextAppearance.AppCompat.Title"/>
    </android.support.v7.widget.Toolbar>

    <android.support.design.widget.TabLayout
        android:id="@+id/tabs"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="?attr/colorPrimary"
        app:tabIndicatorHeight="3dp"
        app:tabMode="fixed"/>
</android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
    android:id="@+id/pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

и управляйте им в своем коде следующим образом:

        ViewPager pager = (ViewPager) findViewById(R.id.pager);
    mAdapter = new MyPagerAdapter(getSupportFragmentManager());

    mAdapter.addFragment(first_fragment, firts_fragment_title);
    mAdapter.addFragment(second_fragment, second_fragment_title);
    pager.setAdapter(mAdapter);

    TabLayout tabs = (TabLayout) findViewById(R.id.tabs);
    tabs.setupWithViewPager(pager);
    TextView first_fragment_tab = (TextView) getLayoutInflater().inflate(R.layout.tab_indicator, null);
    TextView second_fragment_tab = (TextView) getLayoutInflater().inflate(R.layout.tab_indicator, null);

    tabs.getTabAt(0).setCustomView(first_fragment_tab);
    tabs.getTabAt(1).setCustomView(second_fragment_tab);
    pager.setCurrentItem(mAdapter.getCount());
person Meikiem    schedule 23.06.2017
comment
Спасибо за ответ. Меня действительно беспокоит то, что моя нижняя навигация работает при пролистывании, а также при выборе значка на панели навигации. Скользящие вкладки, которые я буду реализовывать, также будут работать при смахивании, так как же решить этот конфликт? - person Aakash Shah; 24.06.2017

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

person Ait Bri    schedule 23.06.2017

Да, это возможно!

Шаг 1: Создайте активность с вкладками. (Он автоматически создаст активность с ViewPager)

введите здесь описание изображения

Шаг 2: Преобразуйте эту активность во фрагмент, чтобы иметь возможность добавить ее в свой BottomNavigation. Используйте этот ответ: Преобразование активности во фрагмент

Примечание. Я сделал это в проекте, и наличие других ViewPager на других вкладках панели BottomNavigation сделало все немного сложнее. Использование viewPager.setOffscreenPageLimit(...); решит некоторые из ваших возможных проблем.

person Amiraslan    schedule 23.06.2017
comment
спасибо за ответ, но моя проблема в том, что у меня есть основная деятельность, в которой я использую actinbar и устанавливаю пользовательский вид в этом пользовательском представлении. Теперь, когда я нажимаю кнопку на первом фрагменте этого основного действия, я должен заменить этот фрагмент новым фрагментом, и этот новый фрагмент должен иметь скользящие вкладки с именем вкладки, отображаемым сверху. - person Aakash Shah; 26.06.2017
comment
поэтому проблема в том, что, поскольку основное действие использует панель действий, как мне получить панель инструментов во фрагменте? - person Aakash Shah; 26.06.2017
comment
Я сделал все, но я хочу, чтобы заголовки приложений отображались на панели инструментов. Когда я реализовал как деятельность, она работала. Но после того, как я реализовал его как фрагмент, он не работает - person Aakash Shah; 26.06.2017
comment
@AakashShah Do you want smth like this: camo.githubusercontent.com/ - person Amiraslan; 26.06.2017
comment
@AakashShah Или вот так: drive.google.com/open?id=0B_6NXeVT9k1IUl9jdTBCWkExbms - person Amiraslan; 26.06.2017
comment
первое изображение, которое вы прислали, похоже на то, что я хочу. Я пытаюсь получить это в своем фрагменте, но не могу этого получить. - person Aakash Shah; 27.06.2017
comment
Я устанавливаю панель инструментов в качестве панели действий поддержки в своей MainActivity, которая может вызывать проблему. Мне нужна эта панель инструментов в основной деятельности, поэтому я не могу от нее избавиться. - person Aakash Shah; 27.06.2017