Android ViewPager и несколько фрагментов - PullRequest
0 голосов
/ 27 сентября 2019

Мне нужна помощь.

У меня есть активность.В этом упражнении я хочу отобразить один макет.

Первый макет должен реализовывать ViewPager для анимации пролистывания, второй макет должен появляться, когда я щелкаю элемент ListViewItem в первом макете.

До сих пор я знаю, что для этого мне нужен фрагмент, но я не могу обернуть его вокруг.

Это мой код:

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

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.view_pager);

        oAdapter = new PageAdapter(getSupportFragmentManager());
        oPager = findViewById(R.id.viewpager);
        oPager.setOffscreenPageLimit(NUM_PAGES - 1);
        oPager.setAdapter(oAdapter);
    }

Мой PageAdapter, который заполняет все ViewPages с макетом контейнера в данный момент

public class PageAdapter extends FragmentPagerAdapter {

        public PageAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int pos) {

            PageFragmentContainer oFragment = new PageFragmentContainer();

            return oFragment;
        }

        @Override
        public int getCount() {
            return NUM_PAGES;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            ((ViewPager) container).removeView((View) object);
        }
    }

Мой фрагмент для контейнера

public class PageFragmentContainer extends Fragment {
    View oFragmentView;

    public PageFragmentContainer() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View oView = new View(getActivity());
        oView = inflater.inflate(R.layout.fragment_container_layout, container, false);

        this.oFragmentView = oView;
        return oView;
    }

    @Override
    public void onResume() {
        super.onResume();
    }
}

Этот фрагмент должен быть заменен непосредственно после фрагмента контейнера

public class PageFragmentA extends Fragment {
    View oFragmentView;

    public PageFragmentA() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View oView = new View(getActivity());
        oView = inflater.inflate(R.layout.fragment_layout_a, container, false);

        this.oFragmentView = oView;
        return oView;
    }

    @Override
    public void onResume() {
        super.onResume();
    }
}

Фрагмент B должен отображаться после того, как я щелкну элемент ListItem во фрагменте A

public class PageFragmentB extends Fragment {
    View oFragmentView;

    public PageFragmentB() {

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View oView = new View(getActivity());
        oView = inflater.inflate(R.layout.fragment_layout_b, container, false);

        this.oFragmentView = oView;
        return oView;
    }

    @Override
    public void onResume() {
        super.onResume();
    }
}

Макет для моего контейнера

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/backgroundgradient">

    <FrameLayout
        android:id="@+id/dynamic_fragment_frame_layout"
        android:layout_gravity="top"
        android:layout_height="match_parent"
        android:layout_width="match_parent" />

</RelativeLayout>

Как заменить мои фрагменты

public void replaceFragment(Fragment destFragment){
        FragmentManager fragmentManager = this.getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.dynamic_fragment_frame_layout, destFragment);
        fragmentTransaction.commit();
    }

Когда мой Container Layout загружается, я хотел бы заменить его на Layout из FragmantA , но где?Я уже пытался перебрать загруженные фрагменты с getSupportFragmentManager().getFragments() и заменить все из них на FragmantA , но это, похоже, совсем не так.Это работает почти нормально, когда я создаю экземпляр моего FragmentA in in getItem метода в моем Adapter , тогда я не могу заменить этот макет на FragmantB Layout позжепотому что нет id с "dynamic_fragment_frame_layout".

Как это: enter image description here

...