Как заменить фрагмент Android другим фрагментом внутри ViewPager?

У меня есть пейджер, состоящий из 4 вкладок. Каждая вкладка содержит свой собственный фрагмент.

Как я могу использовать транзакцию фрагмента, чтобы заменить фрагмент на вкладке 3 новым фрагментом?

Я пробовал много вещей, но я не смог придумать решение вообще. Я пробовал искать в google и stackoverflow, но безуспешно.


person Ebad Saghar    schedule 29.09.2015    source источник
comment
Другими словами, вы хотите изменить пользовательский эффект транзакции для ViewPager. Я прав? Извините, я не мог точно понять вопрос.   -  person Dorukhan Arslan    schedule 30.09.2015
comment
Когда вы хотите изменить фрагмент? Во время прокрутки, во время просмотра фрагмента?   -  person mbmc    schedule 30.09.2015
comment
@DorukhanArslan, не могли бы вы выразиться более простым языком?   -  person Ebad Saghar    schedule 30.09.2015
comment
@tibo, смотрю на вкладку и нажимаю кнопку. Кнопка вызывает функцию onFragmentInteraction, которая реализуется активностью. В стороне действия, где я хотел бы, чтобы замена произошла   -  person Ebad Saghar    schedule 30.09.2015
comment
Вы должны опубликовать то, что вы пробовали, или ссылки на это.   -  person Tosin Onikute    schedule 30.09.2015
comment
Я думал, что вы хотите изменить анимацию транзакции по умолчанию на индивидуальную. Я неправильно использовал обычай выше, я, вероятно, был в отсутствующем состоянии. Насколько я понимаю, вы хотите изменять фрагменты в ViewPager, нажимая на кнопки табуляции. Кроме того, когда вы перемещаете фрагмент, вы также хотите изменить выбранную вкладку. Это просто так?   -  person Dorukhan Arslan    schedule 30.09.2015
comment
@DorukhanArslan, нет. Вот что я хочу сделать: у меня есть 4 вкладки. Я выбрал вкладку 3. Внутри вкладки у меня есть кнопка. Я нажимаю эту кнопку, и фрагмент внутри вкладки 3 заменяется новым фрагментом, не затрагивая другие вкладки.   -  person Ebad Saghar    schedule 30.09.2015
comment
Я почти уверен, что есть способ сделать то, что вы просите. Однако, в качестве альтернативы, если вы переключаетесь только между двумя макетами, вы можете рассмотреть возможность размещения двух разных материалов (контент 1 — текущий фрагмент, контент 2 — новый фрагмент) в два макета одного и того же фрагмента. После нажатия этой кнопки измените видимость текущего макета на исчезнувший, а невидимый — на видимый.   -  person Dorukhan Arslan    schedule 30.09.2015
comment
покажите свои коды, чтобы я мог отредактировать решение, если я опубликую сейчас, это не будет иметь смысла, если только вы не сможете жить с мыслительным процессом   -  person Elltz    schedule 30.09.2015
comment
@Elltz, я не могу загрузить код из-за юридических обязательств (это работает). Я могу жить со сквозным процессом   -  person Ebad Saghar    schedule 30.09.2015
comment
@DorukhanArslan, не могли бы вы дать ответ, если я не найду других достаточных ответов, я отмечу ваш как таковой   -  person Ebad Saghar    schedule 30.09.2015


Ответы (1)


Я предполагаю, что ваш фрагмент имеет кнопку, которая находится в центре. Нажав на нее, вы можете изменить раскладку, оставшуюся под этой кнопкой. Содержимое/макет первого упомянутого вами фрагмента следует заменить на оболочку A, а содержимое/макет второго — на оберткуB. Я поставил простой красный фон для wrapperA, чтобы отличить его от wrapperB, wrapperB тоже зеленый по той же причине. Надеюсь, это то, что вы хотите:

public class SwitchingFragment extends Fragment {

    Button switchFragsButton;
    RelativeLayout wrapperA, wrapperB;
    View rootView;

    @Override
    public View onCreateView(LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {
        rootView = inflater.inflate(R.layout.layout_switch, container, false);
        wrapperA = (RelativeLayout) rootView.findViewById(R.id.wrapperA);
        wrapperB = (RelativeLayout) rootView.findViewById(R.id.wrapperB);

        switchFragsButton = (Button) rootView.findViewById(R.id.switchFragsButton);
        switchFragsButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View arg0) {
                if (wrapperB.getVisibility() == View.GONE) {
                    wrapperB.setVisibility(View.VISIBLE);
                    // There is no need to change visibility of wrapperA since it stays behind when wrapperB is visible.
                    // wrapperA.setVisibility(View.GONE);
                }
                else {
                    wrapperB.setVisibility(View.GONE);
                    // Again, there is no need.
                    // wrapperA.setVisibility(View.VISIBLE);
                }
            }
        });

        return rootView;
    }
}

Расположение:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_gravity="center"
    android:orientation="vertical">

    <!-- The content of first fragment should be in "wrapperA". -->
    <RelativeLayout
        android:id="@+id/wrapperA"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/red"
        android:visibility="visible">

    </RelativeLayout>

    <!-- The content of second fragment should be in "wrapperB". -->
    <RelativeLayout
        android:id="@+id/wrapperB"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/green"
        android:visibility="gone">

    </RelativeLayout>

    <!-- As I said, I assume that the layout switcher button is stable
         and so it should be in front of the switching layouts. -->
    <Button
        android:id="@+id/switchFragsButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:background="@color/black"
        android:text="Switch"
        android:textSize="20sp"
        android:textStyle="bold"
        android:textColor="@color/white"/>

</RelativeLayout>

В качестве альтернативы вы можете попытаться изменить фрагмент напрямую, уведомив свой FragmentPagerAdapter, как описано в этой ссылке: Заменить фрагмент другим фрагментом внутри ViewPager

person Dorukhan Arslan    schedule 30.09.2015