Als ich BottomNavigationView einmal gemacht und Tabhost und sein Fragment darin gemacht habe, war ich süchtig danach, also mach dir eine Notiz.
Ich habe hauptsächlich auf die Referenz unten verwiesen, aber ich behebe sie, weil einige Fehler aufgetreten sind.
Erstens ist es eines von jedem Fragment, das durch BottomNavigationView geteilt wird.
Übergeordnetes Fragment.java
Das übergeordnete Fragment der öffentlichen Klasse erweitert das Fragment{
public static Record newInstance() {
return new Record();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.record, container, false);
//Holen Sie sich Fragment Manager
FragmentManager mFragmentManager = getChildFragmentManager();
//Holen Sie sich FragmentTabHost von XML, ID ist Android.R.id.Beachten Sie, dass es Tabhost ist
FragmentTabHost tabHost = (FragmentTabHost)v.findViewById(android.R.id.tabhost);
Log.d("tabHost", String.valueOf(tabHost));
//Richten Sie dies ein, indem Sie den Kontext, FragmentManager und die ID der Ansicht übergeben, die dem Fragment entspricht.
tabHost.setup(getActivity().getApplicationContext(), mFragmentManager, R.id.content);
//Übergeben Sie eine beliebige ID an das Argument vom Typ String
//Dieses Mal bereiten wir zwei TabSpecs vor, um zwischen den beiden Fragmenten aus dem FragmentTabHost zu wechseln.
TabHost.TabSpec mTabSpec1 = tabHost.newTabSpec("tab1");
TabHost.TabSpec mTabSpec2 = tabHost.newTabSpec("tab2");
//Übergeben Sie die Zeichen, die auf der Registerkarte angezeigt werden sollen
mTabSpec1.setIndicator("This is tab1");
mTabSpec2.setIndicator("This is tab2");
Bundle args = new Bundle();
args.putString("string", "message");
//Übergeben Sie ein Argument, um jeder TabSpec eine Klasse zuzuordnen
//Wenn Sie ein Bundle als drittes Argument haben, können Sie Fragment einen Wert übergeben. Übergeben Sie null, wenn dies nicht benötigt wird
tabHost.addTab(mTabSpec1,Kinderfragment 1.class, args);
tabHost.addTab(mTabSpec2,Kinderfragment 2.class, null);
return v;
}
}
Kinderfragment 1.java
Das untergeordnete Fragment 1 der öffentlichen Klasse erweitert das Fragment{
statisches untergeordnetes Fragment 1 newInstance() {neues untergeordnetes Fragment zurückgeben 1();}
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//Wenn Sie während addTab ein Bundle übergeben, erhalten Sie den Wert aus dem Bundle
//Durchfahrt verboten(Null übergeben)In diesem Fall ist eine Implementierung nicht erforderlich. Ansonsten getString("string")Manchmal tritt ein Fehler auf
Bundle args = getArguments();
String str = args.getString("string");
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
return inflater.inflate(R.layout.Untergeordnetes Fragmentlayout 1, null);
}
}
Kinderfragment 2.java
Das untergeordnete Fragment 2 der öffentlichen Klasse erweitert das Fragment{
statisches untergeordnetes Fragment 2 newInstance() {neues untergeordnetes Fragment zurückgeben 2();}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
return inflater.inflate(R.layout.Untergeordnetes Fragmentlayout 2, null);
}
}
Übergeordnetes Fragmentlayout.xml
<?xml version="1.0" encoding="utf-8"?>
<!--Die ID von FragmentTabHost muss sein@android:id/mach es tabhost-->
<android.support.v4.app.FragmentTabHost
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--Wie bei FragmentTabHost wird die ID angegeben. ID muss sein@android:id/zu Registerkarten-->
<TabWidget
android:id="@android:id/tabs"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0"/>
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_weight="0"/>
<!--Fragment wird zum Inhalt hinzugefügt-->
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"/>
</LinearLayout>
</android.support.v4.app.FragmentTabHost>
Untergeordnetes Fragmentlayout.xml(Untergeordnetes Fragmentlayout1,Untergeordnetes Fragmentlayout2)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Kinderfragment" />
</LinearLayout>
Anmerkungen:
Es gibt "android.app.Fragment ~" und "android.support.v4.app.Fragment ~" im Fragment-System, aber es scheint besser, sie (natürlich) zu vereinheitlichen.
[Android-Standard Ich verwende v4 unter Bezugnahme auf den Artikel "Support.v4.app.Fragment sollte anstelle von Fragment verwendet werden" (http://qiita.com/LyricalMaestro0/items/a8bafa653fad23dead8e).
Referenz:
FragmentTabHost Memorandum
Recommended Posts