Der Inhalt dieses Artikels wurde in der folgenden Umgebung überprüft.
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.
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 |
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.
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>
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);
}
}
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>
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);
}
}
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.
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>
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);
}
}
Fragment, das vier Schaltflächen anzeigt, wird durch das
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.
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>
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();
}
}
https://developer.android.com/guide/components/fragments.html
Recommended Posts