Android - Ich brauche einige Klarstellungen von Fragmenten gegenüber Aktivitäten und Ansichten



Answers

  1. Fragment ist ein Teil einer Aktivität, die eine eigene Benutzeroberfläche für diese Aktivität bereitstellt. Fragment kann wie eine Unteraktivität gedacht werden. Dabei wird der vollständige Bildschirm, mit dem der Benutzer interagiert, als Aktivität bezeichnet. Eine Aktivität kann mehrere Fragmente enthalten. Fragmente sind meist ein Teil einer Aktivität.

  2. Eine Aktivität kann basierend auf der Bildschirmgröße 0 oder mehrere Fragmente enthalten. Ein Fragment kann in mehreren Aktivitäten wiederverwendet werden, sodass es bei Aktivitäten als wiederverwendbare Komponente fungiert.

  3. Ein Fragment kann nicht unabhängig existieren. Es sollte immer Teil einer Aktivität sein. Wo Aktivität ohne irgendein Fragment darin bestehen kann.

Question

In Android API 11+ hat Google eine neue Klasse mit dem Namen " Fragment .

In den Videos schlägt Google vor, dass wir wann immer möglich ( link1 , link2 ) Fragmente anstelle von Aktivitäten verwenden sollten, aber sie haben nicht genau erklärt warum.

Was ist der Zweck von Fragmenten und einige mögliche Verwendungen von ihnen (abgesehen von einigen UI-Beispielen, die einfach mit einfachen Ansichten / Layouts erreicht werden können)?

Meine Frage betrifft Fragmente:

  1. Was sind die Zwecke der Verwendung eines Fragments?
  2. Was sind die Vor- und Nachteile der Verwendung von Fragmenten im Vergleich zur Verwendung von Aktivitäten / Ansichten / Layouts?

Bonusfragen:

  1. Können Sie Fragmente wirklich interessant machen? Dinge, die Google in ihren Videos nicht erwähnt hat?
  2. Was ist der beste Weg, um zwischen Fragmenten und den Aktivitäten, die sie enthalten, zu kommunizieren?
  3. Was sind die wichtigsten Dinge zu beachten, wenn Sie Fragmente verwenden? Irgendwelche Tipps und Warnungen aus Ihrer Erfahrung?



Fragmente sind von besonderem Nutzen in manchen Fällen, in denen wir eine Navigationsleiste auf allen unseren Seiten behalten möchten. Sie können ein Rahmenlayout mit dem gewünschten Fragment aufblasen und trotzdem Zugriff auf die Navigationsleiste haben.

Wenn Sie eine Aktivität verwendet hätten, müssten Sie die Schublade in allen Aktivitäten behalten, was zu redundantem Code führt. Dies ist eine interessante Verwendung eines Fragments.

Ich bin neu in Android und denke immer noch, dass ein Fragment auf diese Weise hilfreich ist.




Ein Fragment repräsentiert ein Verhalten oder einen Teil der Benutzeroberfläche in einer Aktivität. Sie können mehrere Fragmente in einer einzelnen Aktivität kombinieren, um eine Benutzeroberfläche mit mehreren Fenstern zu erstellen und ein Fragment in mehreren Aktivitäten wiederzuverwenden. Sie können sich ein Fragment als einen modularen Abschnitt einer Aktivität vorstellen, der einen eigenen Lebenszyklus hat, eigene Eingabeereignisse erhält und während der Ausführung der Aktivität hinzufügen oder entfernen kann.

  • Sie können jedes Fragment unabhängig voneinander bearbeiten, z. B. hinzufügen oder entfernen. Wenn Sie eine solche Fragmenttransaktion ausführen, können Sie sie auch zu einem Backstapel hinzufügen, der von der Aktivität verwaltet wird. Jeder Backstackeintrag in der Aktivität ist ein Datensatz der Fragmenttransaktion, die aufgetreten ist. Der Backstack ermöglicht es dem Benutzer, eine Fragmenttransaktion rückgängig zu machen (rückwärts navigieren), indem er die Zurück-Schaltfläche drückt.

  • Wenn Sie ein Fragment als Teil Ihres Aktivitätslayouts hinzufügen, befindet es sich in einer ViewGroup in der Ansichtshierarchie der Aktivität, und das Fragment definiert sein eigenes Ansichtslayout. Sie können ein Fragment in Ihr Aktivitätslayout einfügen, indem Sie das Fragment in der Layoutdatei der Aktivität als Element oder aus Ihrem Anwendungscode durch Hinzufügen zu einer vorhandenen ViewGroup deklarieren. Ein Fragment muss jedoch nicht Teil des Aktivitätslayouts sein. Sie können auch ein Fragment ohne eigene Benutzeroberfläche als unsichtbaren Arbeiter für die Aktivität verwenden.

  • Beispiel: Wenn Sie den NavigationDrawer ohne Fragmente verwenden, empfiehlt es sich, die NavigationDrawer-Instanz in einer einzigen Aktivität zu belassen, und wenn Sie in der App navigieren, indem Sie aus den Elementen im NavigationDrawer auswählen, sollte jede der gestarteten Aktivitäten nicht implementiert werden Der NavigationDrawer sollte stattdessen die Zurück-Schaltfläche implementieren, um zurück zu der "Haupt" / einzelnen Aktivität zu navigieren, in der der NavigationDrawer implementiert wurde.

    Hinweis: Wenn Sie den NavigationDrawer in mehreren Aktivitäten implementieren möchten, müssen Sie in jeder Aktivität, die Sie anzeigen möchten, eine neue Instanz des NavigationDrawer erstellen.

    Ich nehme an, das wäre ein Nachteil gegenüber der Verwendung von Fragmenten. Wenn Sie ein Fragment verwenden würden, würden Sie nicht viele Instanzen der Schublade benötigen, Sie würden nur eine benötigen.

    Schublade mit Fragmenten statt Aktivitäten

    Wenn Sie den NavigationDrawer mit Fragmenten verwenden, sollte das Fach in einer einzigen Aktivität implementiert werden. Wenn jedes Fach ausgewählt wird, wird sein Inhalt in jedem seiner eigenen Fragmente angezeigt.

  • Kommunizieren zwischen Fragment zu seiner Aktivität : Damit ein Fragment bis zu seiner Aktivität kommunizieren kann, können Sie eine Schnittstelle in der Fragment-Klasse definieren und innerhalb der Aktivität implementieren. Das Fragment erfasst die Schnittstellenimplementierung während seiner onAttach () - Lebenszyklusmethode und kann dann Rufen Sie die Interface-Methoden auf, um mit der Aktivität zu kommunizieren.

    public class YourFragment extends ListFragment {
    OnSelectedListener mCallback;
    
    // Container Activity must implement this interface
    public interface OnSelectedListener {
        public void onItemSelected(int position);
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.your_view, container, false);
    }
    
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    
        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (OnSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnSelectedListener");
        }
    }
    
    }...
    

Jetzt kann das Fragment Nachrichten an die Aktivität übergeben, indem die Methode onItemSelected () (oder andere Methoden in der Schnittstelle) mit der mCallback-Instanz der OnSelectedListener-Schnittstelle aufgerufen wird.

public static class MainActivity extends Activity
        implements YourFragment.OnSelectedListener{
    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
    }

    public void onItemSelected(int position) {
        // The user selected the headline of an article from the YourFragment
        // Do something here to display that article

        YourFragment yourFrag = (YourFragment)
                getSupportFragmentManager().findFragmentById(R.id.your_fragment);

        if (yourFrag != null) {
            // If your frag is available, we're in two-pane layout...

            // Call a method in the YourFragment to update its content
            yourFrag.updateView(position);
        } else {
            // Otherwise, we're in the one-pane layout and must swap frags...

            // Create fragment and give it an argument for the selected item
            YourFragment newFragment = new YourFragment();
            Bundle args = new Bundle();
            args.putInt(YourFragment.ARG_POSITION, position);
            newFragment.setArguments(args);

            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

            // Replace whatever is in the fragment_container view with this fragment,
            // and add the transaction to the back stack so the user can navigate back
            transaction.replace(R.id.fragment_container, newFragment);
            transaction.addToBackStack(null);

            // Commit the transaction
            transaction.commit();
        }
    }
}



Ein Fragment ist ein Teil der Benutzeroberfläche oder des Verhaltens einer Anwendung, die in eine Aktivität eingefügt werden kann, die ein modulareres Aktivitätsdesign ermöglicht. Es ist nicht falsch, wenn wir sagen, ein Fragment ist eine Art Unteraktivität.

Folgende sind wichtige Punkte zu einem Fragment:

  1. Ein Fragment hat sein eigenes Layout und sein eigenes Verhalten mit seinen eigenen Lebenszyklus-Rückrufen.

  2. Sie können Fragmente in einer Aktivität hinzufügen oder entfernen, während die Aktivität ausgeführt wird.

  3. Sie können mehrere Fragmente in einer einzelnen Aktivität kombinieren, um eine Benutzeroberfläche mit mehreren Fenstern zu erstellen.

  4. Ein Fragment kann in mehreren Aktivitäten verwendet werden.

  5. Der Fragmentlebenszyklus ist eng mit dem Lebenszyklus seiner Wirtsaktivität verbunden.

  6. Wenn die Aktivität pausiert ist, werden alle in der Aktivität verfügbaren Fragmente ebenfalls gestoppt.

  7. Ein Fragment kann ein Verhalten implementieren, das keine Benutzerschnittstellenkomponente enthält.

  8. Fragmente wurden der Android-API in Android 3 (Honeycomb) mit API-Version 11 hinzugefügt.

Für weitere Informationen besuchen Sie bitte die offizielle Website, Fragments .




Ein Fragment lebt in einer Aktivität.

Während eine Aktivität auf sich selbst lebt.




Links