Gil*_*rra 45 android android-fragments android-viewpager android-nested-fragment
我需要在一个片段中放置一个ViewPager,但我有两个片段,片段1是我的菜单,片段2我想用作ViewPagerIndicator.
但是片段不能有另一个片段......我需要做些什么呢?

Rya*_*n S 98
从Android 4.2开始,有嵌套片段.http://developer.android.com/about/versions/android-4.2.html#NestedFragments现在,支持库还包括对旧版Android的支持.
所以你可以这样做:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ViewPager mViewPager = (ViewPager) view.findViewById(R.id.viewPager);
mViewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
}
Run Code Online (Sandbox Code Playgroud)
完整实现:https://github.com/marcoRS/nested-fragments/tree/master/src/com/burnside/digital/nestedfragments
小智 33
你必须使用getChildFragmentManager()而不是getSupportFragmentManager() 让FragmentManger里面的片段.但你不应该使用FragmentStatePagerAdapter而不是FragmentPagerAdapter.
Khe*_*raj 15
只需在 Fragments 中使用getChildFragmentManager()而不是getSupportFragmentManager()。
new ViewPagerAdapter(getChildFragmentManager());
Run Code Online (Sandbox Code Playgroud)
new ViewPagerAdapter(getSupportFragmentManager());
Run Code Online (Sandbox Code Playgroud)
fragment_sample.xml 布局<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tablayout"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
SampleFragment.java 班级public class SampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View fragmentView = inflater.inflate(R.layout.fragment_sample, container, false);
return fragmentView;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
// find views by id
ViewPager viewPager = view.findViewById(R.id.viewpager);
TabLayout tabLayout = view.findViewById(R.id.tablayout);
// attach tablayout with viewpager
tabLayout.setupWithViewPager(viewPager);
ViewPagerAdapter adapter = new ViewPagerAdapter(getChildFragmentManager());
// add your fragments
adapter.addFrag(new SampleFragment(), "Tab1");
adapter.addFrag(new SampleFragment2(), "Tab2");
adapter.addFrag(new SampleFragment3(), "Tab3");
// set adapter on viewpager
viewPager.setAdapter(adapter);
}
}
Run Code Online (Sandbox Code Playgroud)
ViewPagerAdapter.java 班级// common adapter for all view pager in your project.
public class ViewPagerAdapter extends FragmentStatePagerAdapter {
private final List<Fragment> mFragmentList = new ArrayList<>();
private final List<String> mFragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(FragmentManager manager) {
super(manager);
}
@Override
public Fragment getItem(int position) {
return mFragmentList.get(position);
}
@Override
public int getCount() {
return mFragmentList.size();
}
@Override
public CharSequence getPageTitle(int position) {
return mFragmentTitleList.get(position);
}
public void addFrag(Fragment fragment) {
mFragmentList.add(fragment);
mFragmentTitleList.add("");
}
public void addFrag(Fragment fragment, String title) {
mFragmentList.add(fragment);
mFragmentTitleList.add(title);
}
}
Run Code Online (Sandbox Code Playgroud)
重要相关链接
| 归档时间: |
|
| 查看次数: |
68347 次 |
| 最近记录: |