webentwicklung-frage-antwort-db.com.de

Fragment-Registerkarten im Fragment

Ich habe in meiner Hauptaktivität eine Aktionsleisten-Navigation mit Registerkarten, die Fragmente verwenden (mit Materialdesign), wie unten beschrieben, was gut funktioniert, aber jetzt möchte ich Tab-Navigation in meinen Fragmenten haben ...

// Add Fragments to Tabs in Main Activity
private void setupViewPager(ViewPager viewPager) {
    Adapter adapter = new Adapter(getSupportFragmentManager());
    adapter.addFragment(new FeedsFragment(), "Latest Updates");
    adapter.addFragment(new ClubTeamsFragment(), "Club Teams");
    adapter.addFragment(new FixturesFragment(), "Fixtures");
    adapter.addFragment(new ResultsFragment(), "Results");
    adapter.addFragment(new ClubFieldsFragment(), "Club Fields");
    viewPager.setAdapter(adapter);
}

Ich bin mir ziemlich sicher, dass TabHost jetzt veraltet ist.

Ich möchte das angehängte Bild erreichen. Die blauen Registerkarten befinden sich auf der Hauptaktivitätsebene und die grauen Datumsregisterkarten befinden sich in der ausgewählten Fragmentansicht.

 enter image description here

Ich habe einige Beiträge über die Verwendung der Tab-Host- oder Fragmentaktivität gelesen oder verwende ich die Aktivität, die auf Fragment erweitert wird?

21
BENN1TH

Siehe unten die Antwort, die ich mit der Verwendung von Fragment-Registerkarten in Fragment-Tabs in meiner MainActivity erzielt habe

In meinem Fragment mit getChildFragmentManager ()

public class FixturesTabs extends Fragment {

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
  }

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.fixtures_new_tabs,container, false);
    // Setting ViewPager for each Tabs
    ViewPager viewPager = (ViewPager) view.findViewById(R.id.viewpager);
    setupViewPager(viewPager);
    // Set Tabs inside Toolbar
    TabLayout tabs = (TabLayout) view.findViewById(R.id.result_tabs);
    tabs.setupWithViewPager(viewPager);


    return view;

}


// Add Fragments to Tabs
private void setupViewPager(ViewPager viewPager) {


    Adapter adapter = new Adapter(getChildFragmentManager());
    adapter.addFragment(new TodaysFixturesFragment(), "Today");
    adapter.addFragment(new WeekFixturesFragment(), "Week");
    adapter.addFragment(new MonthFixturesFragment(), "Month");
    adapter.addFragment(new AllFixturesFragment(), "Month");
    adapter.addFragment(new MyTeamsFixturesFragment(), "My Teams");
    viewPager.setAdapter(adapter);



}

static class Adapter extends FragmentPagerAdapter {
    private final List<Fragment> mFragmentList = new ArrayList<>();
    private final List<String> mFragmentTitleList = new ArrayList<>();

    public Adapter(FragmentManager manager) {
        super(manager);
    }

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

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

    public void addFragment(Fragment fragment, String title) {
        mFragmentList.add(fragment);
        mFragmentTitleList.add(title);
    }

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



}

Und mein XML namens "fixtures_new_tabs.xml", um dem aufgeblasenen Layout zu entsprechen

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
xmlns:app="http://schemas.Android.com/apk/res-auto">


<Android.support.design.widget.CoordinatorLayout
    Android:id="@+id/main_content"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <Android.support.design.widget.AppBarLayout
        Android:id="@+id/appbar"
        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/result_tabs"
            Android:background="@color/grey"
            app:tabTextColor="@color/medium_grey"
            app:tabSelectedTextColor="@color/colorPrimary"
            app:tabIndicatorColor="@color/colorPrimary"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"
            app:tabMode="scrollable"/>
    </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" />

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

</RelativeLayout>

Hoffe, das hilft anderen oder weist anderen in die Richtung für ihre Lösung.

P.S. Wenn Sie nach der Implementierung einen weißen Bildschirm erhalten, haben Sie möglicherweise dasselbe übergeordnete Fragment zu seinem untergeordneten Fragment hinzugefügt.

51
BENN1TH

Ich habe ein paar Dinge in der Han- und BENN1TH-Lösung geändert, da sich die Registerkarte nicht richtig ausrichtete. Ich habe nur zwei Fragmente hinzugefügt. (Sie fügten fünf Fragmente hinzu). Ich hoffe das hilft.

        <Android.support.design.widget.AppBarLayout
        Android:id="@+id/appbar"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        app:layout_scrollFlags="scroll|enterAlways"
        Android:paddingTop="@dimen/appbar_padding_top"
        Android:theme="@style/AppTheme.AppBarOverlay">

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

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