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