Мне нужна помощь.
У меня есть активность.В этом упражнении я хочу отобразить один макет.
Первый макет должен реализовывать 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](https://i.stack.imgur.com/ZleIJ.png)