Próbuję utworzyć aplikację, która zaimplementuje karty paska czynności. Jedna z kart powinna zawierać MapFragment.MapFragment w słupkach paska działania
Jak mogę zaimplementować pasek akcji z zakładkami, pod jednym z których znajduje się Fragment mapy?
Czy możesz mi pomóc, jak to zrobić?
Oto co mam do tej pory:
Główna klasa
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
}
}
}
fragment zajęcia są tylko zwrócenie inflater z układu .xml.
XML podzial:
main.xml (mapa powinna być na tym pliku 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:id="@+id/mainFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
</LinearLayout>
settings.xml I 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>
Próbowałem do dowiedzieć się, jak postępować przez kilka dni, ale jestem naprawdę zdezorientowany. Każda pomoc/wskazówki byłyby bardzo mile widziane.
Co się stanie z getLastNonConfigurationInstance()
? Jest przestarzałe.
przepraszam, myślałem, moje pytanie było jasny. Zmieniłem go, ale daj mi znać, czy wymaga on dalszej poprawy. – hermann
Cóż, twoje ogólne pytanie jest jasne, ale potem podajesz nam garść kodu i nie wyjaśniasz, jaki jest problem z tym kodem. Posiadanie 'MapFragment' w zakładce paska akcji nie różni się od tego, że jakikolwiek inny fragment znajduje się w zakładce paska akcji. – CommonsWare
Nie mogę jednak wymyślić, jak to zrobić. Po zmianie pliku main.xml i dodaniu fragmentu otrzymuję komunikat "Błąd kompilacji błędów klasy" spowodowany przez java.lang.IllegalArgumentException: Binarny plik XML nr 2: Zduplikowany identyfikator 0x7f040005, znacznik pusty lub identyfikator nadrzędny 0x1020002 z innym fragment dla com.google.android.gms.maps.MapFragment 12-28 21: 14: 07.991: E/AndroidRuntime (26189): \t na android.app.Activity.onCreateView (Activity.java:4722) ' – hermann