[JAVA] Fragmentgrundlagen

Überprüfungsumgebung

Der Inhalt dieses Artikels wurde in der folgenden Umgebung überprüft.

Was ist Fragment?

So erstellen Sie ein Fragment

Erstellen Sie eine Fragment-Unterklasse wie Aktivität. Die Fragment-Klasse ist in den Paketen android.app und android.support.v4.app vorhanden. Sie sollten die Support v4 Fragment-Klasse verwenden. Die Fragment-Klasse, die einen Fehler in der Fragment-Klasse im android.app-Paket behebt, wird in Support v4 gespeichert.

Lebenszyklusmethode

Wie bei der Aktivität gibt es einen Lebenszyklus. Die Lebenszyklusmethode ist eng mit dem Lebenszyklus der Aktivität verbunden. Das Folgende ist die Reihenfolge, in der Fragment von onCreate of Activity hinzugefügt wird. Wenn das Fragment-Tag in der Layoutdatei von Activity beschrieben ist und der vollständige Klassenname der Fragmentklasse im Attribut name beschrieben ist, lautet die Reihenfolge nicht wie folgt.

Methode, um in den Vordergrund zu gehen

Methode Erläuterung
onAttach(Activity)
* API Level 23 oder höher bei Anhängen(Context)
Methode, die aufgerufen wird, wenn sie einer Aktivität zugeordnet ist
onCreate(Bundle) Methode, die beim Generieren eines Fragments aufgerufen wird
onCreateView(LayoutInflater, ViewGroup, Bundle) Methode, die beim Erstellen einer Ansicht aufgerufen wird, die als Fragment angezeigt werden soll
onActivityCreated(Bundle) Methode, die aufgerufen wird, wenn die Verarbeitung der onCreate-Aktivitätsmethode abgeschlossen ist
onViewStateRestored(Bundle) Methode, die aufgerufen wird, wenn die Wiederherstellung des staatlich gespeicherten Fragments abgeschlossen ist
onStart() Eine Methode, die nach dem Ausführen der onStart-Aktivitätsmethode aufgerufen wird und die Bildschirmanzeige für den Benutzer verarbeitet.
onResume() Es wird nach dem Ausführen der onResume-Aktivitätsmethode aufgerufen und wartet nach Abschluss der Verarbeitung auf ein Ereignis des Benutzers.

Methode, um im Hintergrund zu sein

Methode Erläuterung
onPause() Wird unmittelbar vor der Ausführung der onPause-Methode der Aktivität aufgerufen.
onStop() Wird unmittelbar vor der Ausführung der onStop-Methode der Aktivität aufgerufen.
onDestroyView() Wird vor der onDestroy-Methode der Aktivität aufgerufen. Methode, die beim Bereinigen der mit Fragment verknüpften Ansicht aufgerufen wird
onDestroy() Wird vor der onDestroy-Methode der Aktivität aufgerufen. Methode, die beim Bereinigen des Fragmentzustands aufgerufen wird
onDetach() Wird vor der onDestroy-Methode der Aktivität aufgerufen. Eine Methode, die aufgerufen wird, wenn die Verbindung mit Activity unterbrochen wird

Beispiel einer App mit Fragment

App-Spezifikationen

Eine Anwendung, die eine Schaltfläche vorbereitet und wenn die Schaltfläche gedrückt wird, wird ein der Schaltfläche entsprechendes Fragment generiert und ersetzt.

Vollständiges Bild

Fragment_01.png

Fragment wird angezeigt, wenn die Taste gedrückt wird

Schaltfläche für persönliche Informationen

Layoutdatei

fragment_user_info.xml


<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="jp.co.casareal.sample.fragmentsample.fragment.UserInfoFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:textSize="20sp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Name: Casa Real Taro" />
    <TextView
        android:textSize="20sp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Alter: 33 Jahre alt" />

</LinearLayout>

Java-Quellcode

UserInfoFragment.java


package jp.co.casareal.sample.fragmentsample.fragment;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import jp.co.casareal.sample.fragmentsample.R;

public class UserInfoFragment extends Fragment {


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_user_info, container, false);
    }

}

Lieblingsfarbknopf

Layoutdatei

fragment_color.xml


<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="jp.co.casareal.sample.fragmentsample.fragment.ColorFragment">

    <!-- TODO: Update blank fragment layout -->
    <TextView
        android:textSize="20sp"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Lieblingsfarbe: orange" />

</LinearLayout>

Java-Quellcode

ColorFragment.java


package jp.co.casareal.sample.fragmentsample.fragment;


import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import jp.co.casareal.sample.fragmentsample.R;

public class ColorFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_color, container, false);
    }
}

Fragment zur Anzeige von 4 Schaltflächen

Der Teil, in dem die vier Schaltflächen angezeigt werden, wird ebenfalls mit Fragmet erstellt. Als Punkt hier die Methode der Zeichenfolge, die auf das onClick-Attribut des Button-Tags gesetzt wurde Wenn definiert, handelt es sich um eine Spezifikation, die verknüpft ist. Die Klasse, die die Methode des Attributs onClick implementiert, muss jedoch eine Aktivität sein, die Fragment enthält. </ b> Wenn Sie es mit Fragment implementieren, müssen Sie View mit findViewById abrufen und mit setOnClickListener ohne Fragment festlegen.

Layoutdatei

fragment_menu.xml


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">

        <Button
            android:onClick="onClickUserInfo"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.25"
            android:id="@+id/userInfoButton"
            android:text="@string/btnUserInfo"
            />
        <Button
            android:onClick="onClickColor"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.25"
            android:id="@+id/colorButton"
            android:text="@string/btnColor"
            />


        <Button
            android:onClick="onClickDrink"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.25"
            android:id="@+id/drinkButton"
            android:text="@string/btnDrink"
            />
        <Button
            android:onClick="onClickFood"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="0.25"
            android:id="@+id/foodButton"
            android:text="@string/btnFood"
            />

</LinearLayout>

Java-Quellcode

MenuFragment.java


package jp.co.casareal.sample.fragmentsample.fragment;

import android.app.Activity;
import android.content.Context;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;

import jp.co.casareal.sample.fragmentsample.R;


public class MenuFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
       return inflater.inflate(R.layout.fragment_menu, container, false);
    }


}

Aktivitäten, die den gesamten Bildschirm ausmachen

Fragment-Tag

Fragment, das vier Schaltflächen anzeigt, wird durch das -Tag beschrieben und durch das name-Attribut mit Java verknüpft. Die ID wird im Attribut id angegeben, damit das beim Drücken der Taste angezeigte Frament dynamisch ersetzt werden kann.

Fragment ersetzen

Rufen Sie die Methode beginTransaction () der FragmentManager-Klasse auf, um die FragmentTransaction abzurufen. Das Fragment wird durch die replace () -Methode ersetzt. Rufen Sie nach dem Festlegen des Fragments die Methode commit () auf. Wenn Sie das vorherige Fragment anzeigen möchten, wenn die Zurück-Taste gedrückt wird, können Sie auch das Timing für die Fragmenteinstellung verwenden. Muss mit der Methode addToBackStack () im Backstack gespeichert werden.

Layoutdatei

activity_main.xml



<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="jp.co.casareal.sample.fragmentsample.MainActivity">

    <FrameLayout
        android:id="@+id/menuFrame"
        android:layout_width="368dp"
        android:layout_height="wrap_content"
        android:layout_marginRight="8dp"
        app:layout_constraintRight_toRightOf="parent"
        android:layout_marginLeft="8dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:layout_marginTop="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginEnd="8dp">

    <fragment
        android:id="@+id/menuFragment"
        android:name="jp.co.casareal.sample.fragmentsample.fragment.MenuFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:layout="@layout/fragment_menu"
        />
    </FrameLayout>

    <FrameLayout
        android:id="@+id/contents"
        android:layout_width="368dp"
        android:layout_height="417dp"

        android:layout_marginBottom="8dp"
        android:layout_marginLeft="8dp"
        android:layout_marginRight="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/menuFrame"
        app:layout_constraintVertical_bias="0.0" />
</android.support.constraint.ConstraintLayout>

Java-Quellcode

MainActivity.java


package jp.co.casareal.sample.fragmentsample;




import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import jp.co.casareal.sample.fragmentsample.fragment.ColorFragment;
import jp.co.casareal.sample.fragmentsample.fragment.DrinkFragment;
import jp.co.casareal.sample.fragmentsample.fragment.FoodFragment;
import jp.co.casareal.sample.fragmentsample.fragment.UserInfoFragment;

public class MainActivity extends AppCompatActivity {

    private FragmentManager fragmentManager;

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

    public void onClickUserInfo(View view) {
        Fragment fragment = new UserInfoFragment();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.contents,fragment );
        transaction.addToBackStack(null);
        transaction.commit();
    }

    public void onClickColor(View view) {
        Fragment fragment = new ColorFragment();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.contents,fragment );
        transaction.addToBackStack(null);
        transaction.commit();
    }

    public void onClickDrink(View view) {
        Fragment fragment = new DrinkFragment();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.contents,fragment );
        transaction.addToBackStack(null);
        transaction.commit();

    }

    public void onClickFood(View view) {
        Fragment fragment = new FoodFragment();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.replace(R.id.contents,fragment );
        transaction.addToBackStack(null);
        transaction.commit();
    }
}


Referenz

https://developer.android.com/guide/components/fragments.html

Recommended Posts

Fragmentgrundlagen
Rails Grundlagen
Ruby-Grundlagen
JPA-Grundlagen 1
Docker-Grundlagen
ViewPager-Grundlagen
Java-Grundlagen
Java-Grundlagen
JavaScript-Grundlagen
JPA-Grundlagen 2
Java-Grundlagen
RecyclerView-Grundlagen
Schienen CSV Basic
Grundlagen des Rails-Routings
Grundlagen der Rails-Datenbank
Grundlagen des Rails Logger
Grundlagen der Java-Programmierung
Grundlagen von Ruby
Java JAR-Grundlagen
Objektorientierte (Java) Grundlagen
vim (gitbush) Grundlagen
Grundlagen regulärer Ausdrücke
Grundlagen der Java-Parallelverarbeitung
Rspec Basics [Rails]
Grundlagen der Stream-API