Implementieren von Aktionsleisten mit Fragmenten

So vor kurzem musste ich Action-Bar-Tabs implementieren, die das aktuelle Fragment mit einem neuen Fragment austauschen würden. Trotz Stunden intensiver Suche konnte ich keine klare Lösung finden, also dachte ich, ich würde mir vorstellen, wie ich das Problem hier gelöst habe. Zwei der Fragmente enthielten Listenansichten, die sich als ein großer Komplikationsfaktor herausstellten.

  • Position in ListView speichern
  • Android AppCompat-v21 vs reines Material
  • Kamera aus einer Aktivität aufrufen, ein Bild aufnehmen und auf einen Server hochladen
  • Android - Wie gebe ich Gewicht programmgesteuert für ein RelativeLayout?
  • Wie man Daten von DialogFragment zu einem Fragment sendet?
  • Mit Hilfe von Gradle, wie kann ich sicherstellen, dass eine Datei an einem bestimmten Ort existiert?
  • Wie kann ich AlertDialog aus dem Präferenzbildschirm öffnen?
  • Wie bekomme ich Webview iframe Link, um den Browser zu starten?
  • Wie bekomme ich eine Android-Service-Rückmeldung von einem Phonegap-Plugin
  • wie man die Größe von multiline bearbeiten Text zu beheben
  • Vorteile der Veröffentlichung einer App im Android Market
  • Finde einen externen SD-Kartenplatz
  • One Solution collect form web for “Implementieren von Aktionsleisten mit Fragmenten”

    Erstellen Sie zunächst eine Aktivität, an die Sie die Fragmente anhängen möchten. In der XML-Datei für diese Aktivität füge ein lineares Layout wie folgt hinzu:

    <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="vertical" tools:context=".WoodenSideProject" > <LinearLayout android:id="@+id/fragment_placeholder" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > </LinearLayout> 

    Füge der XML-Datei noch nichts hinzu. Nicht einmal der Tab-Host, der mit Eclipse vorinstalliert ist.

    Als nächstes schaffen Sie Ihre Fragmente. Zuerst baue die Benutzeroberfläche für dein Fragment, wie du es mit der XML-Datei des Fragments verwenden möchtest. Ich werde zeigen, wie man ein Fragment mit einer Listenansicht erstellt:

     public class Fragment1Name extends Fragment { public static String TAG="DirectionsFragment"; private String[] list_items = {"Put the list of Strings you want here"}; ListView lView1; /*@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, list_items); setListAdapter(adapter); }*/ @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_XML_title, container, false); createListView(view); // Inflate the layout for this fragment return view; } private void createListView(View view) { lView1 = (ListView) view.findViewById(R.id.ListViewID); //Set option as Multiple Choice. So that user can able to select more the one option from list lView1.setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, list_items)); } } 

    Manche Leute empfehlen, ListFragment für ein Fragment zu erweitern, das eine Listenansicht verwendet. Meine Erfahrung war, dass ist mehr Mühe, als es wert ist.

    Richten Sie die Java-Datei der Aktivität wie folgt ein:

     public class ActivityName extends FragmentActivity { public static Context appContext; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_project); ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); setTitle("WoodenSideProject"); ActionBar.Tab tab1 = actionBar.newTab().setText("Tab1"); ActionBar.Tab tab2 = actionBar.newTab().setText("Tab2"); ActionBar.Tab tab3 = actionBar.newTab().setText("Tab3"); Fragment Fragment1Name = new Fragment1Name(); Fragment Fragment2Name = new Fragment2Name(); Fragment Fragment3Name = new Fragment3Name(); tab1.setTabListener(new MyTabsListener(Fragment1Name)); tab2.setTabListener(new MyTabsListener(Fragment2Name)); tab3.setTabListener(new MyTabsListener(Fragment3Name)); actionBar.addTab(tab1); actionBar.addTab(tab2); actionBar.addTab(tab3); } 

    Innerhalb derselben Aktivität die folgende Klasse erstellen:

     class MyTabsListener implements ActionBar.TabListener { public Fragment fragment; public MyTabsListener(Fragment fragment) { this.fragment = fragment; } @Override public void onTabReselected(Tab tab, FragmentTransaction ft) { //do what you want when tab is reselected, I do nothing } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { ft.replace(R.id.fragment_placeholder, fragment); } @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) { ft.remove(fragment); } } 

    Ich weiß nicht, ob andere so viel Mühe hatten, wie ich Action-Bar-Tabs mit Fragmenten implementiere, aber wenn sie hoffen, dass dies hilft. Irgendwelche Vorschläge für bessere Implementierungen würden sehr geschätzt.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.