web-dev-qa-db-de.com

So legen Sie einen ViewPager in einem Fragment fest

Ich muss einen ViewPager in ein Fragment einfügen, aber ich habe zwei Fragmente: Fragment 1 ist mein MENÜ und Fragment 2, das ich als ViewPagerIndicator verwenden möchte. 

Aber ein Fragment kann kein anderes Fragment haben ... was muss ich dafür tun?

enter image description here

38
Gilberto Ibarra

Ab Android 4.2 gibt es verschachtelte Fragmente. http://developer.Android.com/about/versions/Android-4.2.html#NestedFragments Die Support-Bibliothek unterstützt jetzt auch ältere Versionen von Android.

So kannst du so etwas machen:

@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()));
    }

Vollständige Implementierung hier verfügbar: https://github.com/marcoRS/nested-fragments/tree/master/src/com/burnside/digital/nestedfragments

82
Ryan S

Sie müssen getChildFragmentManager() anstelle von getSupportFragmentManager() verwenden, um die FragmentManger in ein Fragment zu bekommen .__ Sie sollten jedoch FragmentStatePagerAdapter nicht FragmentPagerAdapter verwenden.

27
hawa11

es ist möglich. Versuchen Sie, diese Code-Datei view_pager_fragment.xml auszuführen 

<Android.support.design.widget.AppBarLayout
    Android:id="@+id/appBarLayout"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

    <Android.support.design.widget.TabLayout
        Android:id="@+id/tab"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content" />

</Android.support.design.widget.AppBarLayout>

<Android.support.v4.view.ViewPager
    Android:id="@+id/viewpager"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior" />

ViewPagerFragment 

ViewPager viewPager;
TabLayout tabLayout;

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.tracks, container, false);

    viewPager = (ViewPager) view.findViewById(R.id.viewpager);
    tabLayout = (TabLayout) view.findViewById(R.id.tab);

    return view;
}

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    setupViewPager(viewPager);
    tabLayout.setupWithViewPager(viewPager);

    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {

        }

        @Override
        public void onTabReselected(TabLayout.Tab tab) {

        }
    });
}

private void setupViewPager(ViewPager viewPager) {
    ViewPagerAdapter viewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());``

    viewPagerAdapter.addFragment(new FirstFragment(), "First");
    viewPagerAdapter.addFragment(new SecoundFragment(), "Secound");
    viewPagerAdapter.addFragment(new LoginFragment(), "Login");

    viewPager.setAdapter(viewPagerAdapter);
}

private class ViewPagerAdapter extends FragmentPagerAdapter {

    List<Fragment> fragmentList = new ArrayList<>();
    List<String> fragmentTitles = new ArrayList<>();

    public ViewPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    @Override
    public Fragment getItem(int position) {
        return fragmentList.get(position);
    }

    @Override
    public int getCount() {
        return fragmentList.size();
    }

    @Override
    public CharSequence getPageTitle(int position) {
        return fragmentTitles.get(position);
    }

    public void addFragment(Fragment fragment, String name) {
        fragmentList.add(fragment);
        fragmentTitles.add(name);
    }
}
1
mukesh mali

Mit der Android Support V4-Bibliothek können Sie ein Fragment in ein anderes Fragment einfügen. Versuchen Sie es zu benutzen, es kann Ihr Problem lösen.

0
Kyu_

Nachdem Sie einige Beispiele gelesen haben, können Sie keine FragmentActivity in einer fragmentActivity . Haben. Es ist nicht erforderlich, zwei Fragmente zu haben, und dies muss ein FragmentPageAdapter sein ... ich muss dies nur tun. 

<Android.support.v4.view.ViewPager
        Android:id="@+id/pager"
        Android:layout_width="match_parent"
        Android:layout_height="0px"
        Android:layout_weight="1" >
</Android.support.v4.view.ViewPager>

<LinearLayout
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_weight="0"
        Android:gravity="center"
        Android:measureWithLargestChild="true"
        Android:orientation="horizontal" >

<Button
            Android:id="@+id/first"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="First" >
        </Button>

<Button
            Android:id="@+id/last"
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:text="Last" >
</Button>
</LinearLayout>

Quelle: http://www.truiton.com/2013/05/Android-fragmentpageradapter-example/

0
Gilberto Ibarra

Verwenden Sie einfach getChildFragmentManager () anstelle von getSupportFragmentManager () in Fragments.

In Fragmenten

new ViewPagerAdapter(getChildFragmentManager());

Inside Aktivität

new ViewPagerAdapter(getSupportFragmentManager());

Einfacher Code

fragment_sample.xml layout

<?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>

SampleFragment.Java klasse

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);
    }
}

ViewPagerAdapter.Java klasse

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);
    }
}

Wichtige verwandte Links

0
Khemraj