[Android / Java] Bildschirmübergang und Rückgabeverarbeitung in Fragmenten

Einführung

Ich lerne, mobile Apps mit Java in Android Studio zu entwickeln. Ich habe nicht viel Mühe in die Layout-Datei gesteckt (ungefähr). Ich habe die Zeichenfolgendatei nicht verwendet, weil ich mich auf die Bildschirmumschaltung konzentriert habe.

Was ich gelernt habe

Übersicht über die zum Lernen erstellte Beispiel-App

Eine einfache App, mit der Sie das Hauptfragment für eine Aktivität vorbereiten und durch Drücken einer Taste von dort zwischen den beiden Fragmenten wechseln können. Aktivität 1 Fragment: 3 (1 Haupt-, 2 Unter-)

Klicken Sie auf diese Schaltflächen ① und ②, um zu Unterfragment 1 bzw. Unterfragment 2 zu wechseln.

Hauptbildschirm (MainFragment)
Sub1-Bildschirm (SubFragment1)
Sub2-Bildschirm (SubFragment2)

Verzeichnisaufbau

スクリーンショット 2020-09-29 15.06.37.png

Verarbeiten des Inhalts jeder Java-Datei

Layoutdatei

activity_main.xml



<?xml version="1.0" encoding="utf-8"?>

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activityMain"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

</FrameLayout>

fragment_main.xml


<?xml version="1.0" encoding="utf-8"?>

<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragmentMain"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainFragment">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="25dp"
        android:text="Es ist das Hauptfragment"/>

    <Button
        android:id="@+id/bt1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="250dp"
        android:layout_marginLeft="70dp"
        android:textSize="25dp"
        android:text="①"/>

    <Button
        android:id="@+id/bt2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="250dp"
        android:layout_marginLeft="250dp"
        android:textSize="25dp"
        android:text="②"/>

</FrameLayout>

fragment_sub1.xml



<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/SubFragment1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SubFragment1">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="25dp"
        android:text="Es ist Unterfragment 1"/>

</FrameLayout>

fragment_sub2.xml



<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/SubFragment2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".SubFragment2">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:textSize="25dp"
        android:text="Unterfragment 2" />

</FrameLayout>

Java-Datei

MainActivity.java

MainActivity.java



public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Rufen Sie die Methode auf und zeigen Sie standardmäßig MainFragment an
        addFragment(new MainFragment());
    }

    //Definieren Sie eine Methode zum Anzeigen des Fragments (übergeben Sie das Fragment, das Sie als Argument anzeigen möchten).
    private void addFragment(Fragment fragment) {
        //Holen Sie sich Fragment Manager
        FragmentManager manager = getSupportFragmentManager();
        //Starten Sie die Fragmenttransaktion
        FragmentTransaction transaction = manager.beginTransaction();
        //Hauptfragment hinzugefügt
        transaction.add(R.id.activityMain, fragment);
        //Festschreiben einer Fragmenttransaktion. Der Fragmentstatus wird durch Festschreiben wiedergegeben
        transaction.commit();
    }

    //Definieren Sie eine Methode, um die Zurück-Schaltfläche "←" auf die Aktionsleiste (obere Leiste) zu setzen.
    public void setupBackButton(boolean enableBackButton) {
        //Holen Sie sich die Aktionsleiste
        ActionBar actionBar = getSupportActionBar();
        //Setzen Sie die Schaltfläche "←", um zur Aktionsleiste zurückzukehren (Argument ist wahr):Anzeige falsch:Versteckt)
        actionBar.setDisplayHomeAsUpEnabled(enableBackButton);
    }
}

Ich möchte das angegebene Fragment auf dem Bildschirm anzeigen, also "transaction.add"

Geben Sie einen solchen Wert als Argument ein

transaction.add (R-Wert des hinzuzufügenden Layoutbildschirmteils, hinzuzufügendes Fragmentobjekt (soll angezeigt werden));

MainFragment.java

MainFragment.java



public class MainFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //Blasen Sie den als Fragment angezeigten Bildschirm aus der Layoutdatei auf
        View view = inflater.inflate(R.layout.fragment_main, container, false);

        //Holen Sie sich die übergeordnete Aktivität, zu der Sie gehören
        MainActivity activity = (MainActivity) getActivity();
        //Legen Sie den Titel in der Aktionsleiste fest
        activity.setTitle("Hauptfragment");
        //Schaltfläche "Zurück ausblenden" (Hauptfragment benötigt keine Schaltfläche "Zurück")
        //Wenn Sie dies nicht auf false setzen, bleibt die Schaltfläche "Zurück" angezeigt, wenn Sie vom Unterfragment zurückkehren.
        activity.setupBackButton(false);

        //Schaltflächenelement abrufen
        Button bt1 = view.findViewById(R.id.bt1);
        Button bt2 = view.findViewById(R.id.bt2);

        //① Verarbeitung beim Klicken auf die Schaltfläche
        bt1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Übergang zu SubFragment1
                replaceFragment(new SubFragment1());
            }
        });

        //② Verarbeitung beim Klicken auf die Schaltfläche
        bt2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //Übergang zu SubFragment2
                replaceFragment(new SubFragment2());
            }
        });

        return view;
    }

    //Definieren Sie eine Methode zum Wechseln des anzuzeigenden Fragments (übergeben Sie das Fragment, das Sie als Argument anzeigen möchten).
    private void replaceFragment(Fragment fragment) {
        //Holen Sie sich Fragment Manager
        FragmentManager manager = getFragmentManager(); //GetSupportFragmentManager in Aktivität()?
        //Starten Sie die Fragmenttransaktion
        FragmentTransaction transaction = manager.beginTransaction();
        //Layout durch Fragment ersetzt (hinzugefügt)
        transaction.replace(R.id.activityMain, fragment);
        //Speichern Sie die Ersatztransaktion im Backstack
        transaction.addToBackStack(null);
        //Fragmenttransaktion festschreiben
        transaction.commit();
    }
}

Ich habe das Hauptfragment bereits angezeigt und möchte die Anzeige mit einem Klick auf eine Schaltfläche ändern. Verwenden Sie daher "transaction.replace" Das Argument ist das gleiche Bild wie die Verarbeitung von add transaction.replace (R-Wert des anzuzeigenden Layoutbildschirmteils, zu ersetzendes Fragmentobjekt (soll angezeigt werden));

Bei Unterfragmenten, die vom Hauptfragment übergegangen sind, möchten wir mit der Zurück-Schaltfläche "←" in der Aktionsleiste zum Hauptfragment zurückkehren können. transaction.addToBackStack(null); Durch die Beschreibung wird das vor dem Übergang angezeigte Fragment gespeichert. Mit dieser Beschreibung im Übergangszielfragment getFragmentManager().popBackStack(); Wenn Sie anrufen, können Sie zurückkehren, wenn Sie auf die Zurück-Schaltfläche "←" klicken.

SubFragment1.java / SubFragment2.java

SubFragment1.java



public class SubFragment1 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //Blasen Sie den als Fragment angezeigten Bildschirm aus der Layoutdatei auf
        View view = inflater.inflate(R.layout.fragment_sub1, container, false);

        //Holen Sie sich verbundene Elternaktivität
        MainActivity activity = (MainActivity) getActivity();
        //Legen Sie den Titel in der Aktionsleiste fest
        activity.setTitle("Unterfragment 1");
        //Schaltfläche Zurück anzeigen
        activity.setupBackButton(true);

        //Mit dieser Beschreibung kann das Aktionsleistenmenü im Fragment verwendet werden.
        setHasOptionsMenu(true);

        return view;
    }

    //Verarbeitung, wenn die Aktionsleisten-Taste gedrückt wird
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            // android.R.id.Erkennt den Vorgang, wenn zu Hause die Zurück-Taste "←" gedrückt wird
            case android.R.id.home:
                //Führt den Prozess aus, um zu dem vor dem Übergang angezeigten Fragment zurückzukehren
                getFragmentManager().popBackStack();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

SubFragment2.java



public class SubFragment2 extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        //Blasen Sie den als Fragment angezeigten Bildschirm aus der Layoutdatei auf
        View view = inflater.inflate(R.layout.fragment_sub2, container, false);

        //Holen Sie sich verbundene Elternaktivität
        MainActivity activity = (MainActivity) getActivity();
        //Legen Sie den Titel in der Aktionsleiste fest
        activity.setTitle("Unterfragment 2");
        //Schaltfläche Zurück anzeigen
        activity.setupBackButton(true);

        //Mit dieser Beschreibung kann das Aktionsleistenmenü im Fragment verwendet werden.
        setHasOptionsMenu(true);

        //Ansicht Ansicht ist gut?
        return view;
    }

    //Verarbeitung, wenn die Schaltfläche in der Aktionsleiste gedrückt wird
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        switch (item.getItemId()) {
            //Wenn die Zurück-Taste "←" Android gedrückt wird.R.id.Der Wert wird in home eingegeben
            case android.R.id.home:
                //Führt den Prozess aus, um zu dem vor dem Übergang angezeigten Fragment zurückzukehren
                getFragmentManager().popBackStack();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }
}

getFragmentManager (). PopBackStack (); Diese Beschreibung kehrt zum vorherigen Fragment zurück.

Schließlich

Ich habe es diesmal nicht in den Inhalt aufgenommen, aber ich hoffe, dass ich in Zukunft über die Übertragung von Daten zwischen Fragmenten schreiben kann.

Ich bin seit weniger als einem Monat ein Anfänger, seit ich angefangen habe, Java / Android zu lernen. Wenn Sie Vorschläge haben, kommentieren Sie bitte.

Materialien, die ich als Referenz verwendet habe

Es war sehr leicht zu verstehen und war hilfreich! Vielen Dank!

Recommended Posts

[Android / Java] Bildschirmübergang und Rückgabeverarbeitung in Fragmenten
[Android Studio] Bildschirmübergang über die Schaltfläche [Java]
Von Java nach C und von C nach Java in Android Studio
Parallele und parallele Verarbeitung in verschiedenen Sprachen (Java Edition)
Repräsentiert "nächster Tag" und "vorheriger Tag" in Java / Android
Asynchrone Verarbeitung und Web-API-Integration in Android Studio
Android-Entwicklung ~ Bildschirmübergang (Absicht) ~
Gemessene Parallelverarbeitung mit Java
Bildschirmübergang mit Swing, Java
JSON in Java und Jackson Teil 1 Gibt JSON vom Server zurück
Technische Ursachen und Gegenmaßnahmen für Punkte, die von Android-Apps und Kotlin abhängig sind (1. Verarbeitung des Android-Bildschirmübergangs (Fragment))
Versuchen Sie, Android Hilt in Java zu implementieren
Bildschirmübergang mit Intent in Kotlin
Beispiel für Codierung und Decodierung in Java
Datumsverarbeitung in Java (LocalDate: Initialisierung)
Ich möchte mit Kotlin und Java zum vorherigen Bildschirm zurückkehren!
[Java] Schleifenverarbeitung und Tabelle von neunundneunzig
Bildschirmübergang nach Post-Methode [Java]
Java-Argumente, Rückgabewerte und Überladungen
[Java Swing] Bildschirmübergang durch CardLayout
Führen Sie node.js von Android Java aus (Verarbeitung)
StringBuffer- und StringBuilder-Klasse in Java
Unterstützung für IllegalArgumentException: In Android Java wurde keine Ansicht für ID in Fragmenten gefunden
Verstehe gleich und hashCode in Java
Informationen zur Dateikopierverarbeitung in Java
[Android] Konvertieren Sie Map in JSON mit GSON mit Kotlin und Java
[Java] Ausnahmetypen und grundlegende Verarbeitung
Hallo Welt in Java und Gradle
[Android] Unterschied zwischen finish () und return;
Webanwendungsstruktur nach Java und Verarbeitungsablauf in der Präsentationsschicht
Aktivitätsübergang mit JAVA-Klassen-Refactoring und Instanz-Experimentieren auf Android-Seite
Unterschied zwischen final und Immutable in Java
Android Asynchrone UI-Thread-Verarbeitung
Unterschied zwischen Arrylist und verknüpfter Liste in Java
Programmieren Sie PDF-Kopf- und Fußzeilen in Java
Lernen Sie Flyweight-Muster und ConcurrentHashMap in Java
Die Richtung von Java in "C ++ Design and Evolution"
Lesen und Schreiben von GZIP-Dateien in Java
Unterschied zwischen int und Integer in Java
Diskriminierung von Enum in Java 7 und höher
Erstelle KeyStore und signiere apk in der Verarbeitung (Android-Modus) (Java kann mit einigen Änderungen verwendet werden)
NLP4J Versuchen Sie eine Textanalyse unter Verwendung einer Verarbeitung in natürlicher Sprache und einer statistischen Verarbeitung der Syntaxanalyse in Java
Eindrücke und Zweifel an der erstmaligen Verwendung von Java in Android Studio
NLP4J Versuchen Sie eine Textanalyse unter Verwendung einer Verarbeitung in natürlicher Sprache und einer statistischen Verarbeitung von Teilen in Java
In Bezug auf transiente Modifikatoren und Serialisierung in Java
Erkennen Sie ähnliche Videos in Java und OpenCV Version 2
Sicherheitslücken und Gegenmaßnahmen bei der wichtigen Verarbeitung (Einkaufsabwicklung) (CSRF)
[Android / Java] Betreiben Sie eine lokale Datenbank in Room
Unterschied zwischen next () und nextLine () in Java Scanner
Unterschiede beim Schreiben von Java-, C # - und Javascript-Klassen
[Verarbeitung × Java] Datentyp und objektorientierte Programmierung
[Android] Alphabetobergrenze und Längenbeschränkung in EditText
Erfassen und speichern Sie die Selen-Installation in Java
Erkennen Sie ähnliche Videos in Java und OpenCV Version 3
Hinzufügen, Lesen und Löschen von Excel-Kommentaren mit Java
Überprüfen Sie das statische und öffentliche Verhalten in Java-Methoden
[Java] Verstehe in 10 Minuten! Assoziatives Array und HashMap