Ich versuche eine App zu erstellen, die Aktionsleisten-Registerkarten implementiert. Eine der Registerkarten sollte ein MapFragment enthalten.MapFragment in der Aktionsleiste Tabs
Wie kann ich eine Aktionsleiste mit Tabs implementieren, unter denen sich ein Kartenfragment befindet?
Können Sie mir helfen, wie Sie damit fortfahren?
Hier ist, was ich bisher:
Hauptklasse
package com.nfc.demo;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentTransaction;
import android.os.Bundle;
public class NFCDemoActivity extends Activity {
Tab selectedTab = null;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar bar = getActionBar();
bar.setDisplayShowHomeEnabled(false);
bar.setDisplayShowTitleEnabled(false);
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setCustomView(R.layout.main);
ActionBar.Tab mapTab = bar.newTab().setText("Map");
ActionBar.Tab settingsTab = bar.newTab().setText("Settings");
ActionBar.Tab aboutTab = bar.newTab().setText("About");
MapFragment mapFragment = new MapFragment();
SettingsFragment settingsFragment = new SettingsFragment();
AboutFragment aboutFragment = new AboutFragment();
mapTab.setTabListener(new TabListener(mapFragment));
settingsTab.setTabListener(new TabListener(settingsFragment));
aboutTab.setTabListener(new TabListener(aboutFragment));
Tab selectedTab = (Tab) getLastNonConfigurationInstance();
if (selectedTab == null) {
bar.addTab(mapTab, false);
bar.addTab(settingsTab, false);
bar.addTab(aboutTab, true);
}
setContentView(R.layout.main);
}
public Object onRetainNonConfigurationInstance() {
return selectedTab;
}
protected boolean isRouteDisplayed() {
return false;
}
protected class TabListener implements ActionBar.TabListener {
private Fragment fragment;
public TabListener(Fragment fragment) {
this.fragment = fragment;
}
public void onTabSelected(Tab tab, FragmentTransaction fragmentTransaction) {
fragmentTransaction.replace(R.id.mainFragment, this.fragment, null);
selectedTab = tab;
}
public void onTabUnselected(Tab tab, FragmentTransaction fragmentTransaction) {
fragmentTransaction.remove(this.fragment);
}
public void onTabReselected(Tab tab, FragmentTransaction fragmentTransaction) {
//do nothing
}
}
}
Die Fragment-Klassen sind alle nur einen inflater mit einem XML-Layout zurück.
XML-Layout:
main.xml (Karte auf dieser XML-Datei sein soll)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mainFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
</LinearLayout>
settings.xml UND about.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="horizontal" >
<TextView
android:id="@+id/textView123"
android:text="asdfg"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
ich versucht habe zu finde heraus, wie man für ein paar Tage vorgeht, aber ich bin wirklich verwirrt. Jede Hilfe/Tipps würde sehr geschätzt werden.
Und was ist mit getLastNonConfigurationInstance()
? Es ist veraltet.
sorry, dachte ich, meine Frage war klar. Ich habe es bearbeitet, aber lassen Sie mich wissen, wenn es weitere Verbesserungen benötigt. – hermann
Nun, Ihre allgemeine Frage ist klar, aber dann übergeben Sie uns eine Menge Code und erklären Sie nicht, was das Problem mit diesem Code ist. Wenn sich ein MapFragment in einer Aktionsleisten-Registerkarte befindet, unterscheidet es sich nicht davon, dass sich ein anderes Fragment in einer Aktionsleisten-Registerkarte befindet. – CommonsWare
Ich kann jedoch nicht herausfinden, wie es geht. Sobald ich die main.xml ändere und ein Fragment anfüge, bekomme ich einen 'Error inflationing class fragment' Fehler' verursacht durch java.lang.IllegalArgumentException: Binär XML Datei Zeile # 2: Duplicate ID 0x7f040005, Tag null, oder übergeordnete ID 0x1020002 mit einem anderen fragment für com.google.android.gms.maps.MapFragment 12-28 21: 14: 07.991: E/AndroidRuntime (26189): \t bei android.app.Activity.onCreateView (Activity.java:4722) ' – hermann