Hallo, TabWidget jedes Register beziehen sich auf neue xml
-
25-09-2019 - |
Frage
Ich verwende Google exmaple von Hallo, TabWidget aber es verändert wie folgt aussehen:
main.xml:
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TabWidget
android:id="@android:id/tabs"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView
android:text="@+layout/text"
android:layout_width="fill_parent"
android:layout_height="fill_parent" />
<TextView
android:id="@+id/textview2"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="this is another tab" />
<TextView
android:id="@+id/textview3"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="this is a third tab" />
</FrameLayout>
</LinearLayout>
</TabHost>
Java-Datei:
public class HelloTabWidget extends TabActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
TabHost mTabHost = getTabHost();
mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("TAB 1").setContent(R.layout.text));
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2));
mTabHost.addTab(mTabHost.newTabSpec("tab_test3").setIndicator("TAB 3").setContent(R.id.textview3));
mTabHost.setCurrentTab(0);
}
}
und hier ist die text.xml in res / Layout:
<LinearLayout
android:id="@+id/LinearLayout01"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
xmlns:android="http://schemas.android.com/apk/res/android" >
<TextView
android:layout_height="wrap_content"
android:layout_width="fill_parent"
android:text="This is Tab 1" />
</LinearLayout>
Was ich versuche im Grunde zu tun hat jeden Registerkarte eine eigene XML-Datei beziehen und nicht alle in main.xml, aber der Text in dem ersten Registerkarte wird nicht angezeigt.
Lösung
Versuchen Sie, jede Registerkarte haben, um seine eigene Activity
verweisen? Wenn ja, können Sie eine Absicht als Inhalt für jede Registerkarte ein:
intent = new Intent().setClass(this, Test.class);
spec = tabHost.newTabSpec("tab_test1").setIndicator("TAB 1").setContent(intent);
tabHost.addTab(spec);
Natürlich würden Sie dann eine Klasse haben müssen den Namen Test (oder was auch immer), dass Sätze wie das Layout test.xml
.
public class Test extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test);
}
}
Dieses Tutorial helfen Ihnen weiter, wenn dies der Art von Szenario, dass Sie einrichten versuchen.
Andere Tipps
Da ist drei Optionen für die Registerkarten, um die integrierte in Tab Host verwendet wird.
- Mehrere Ansichten auf einer einzigen Aktivität mit einer Layout-Datei
- Mehrere Aktivitäten
- gebaut Benutzerdefinierte Ansichten in einem TabContentFactory
Es klingt wie Sie # 3 wollen. Was Sie tun müssen, ist so etwas wie folgt aus:
setContent(new TabHost.TabContentFactory() {
public View createTabContent(String tag)
{
View view = LayoutInflater.from(HelloTabWidget.this).inflate(R.layout.text);
// Setup the view here
return view;
}});
View view = LayoutInflater.from(HelloTabWidget.this).inflate(R.layout.text);
Das ist nicht ganz richtig als LayoutInflater.inflate zwei Parameter nimmt.