Le contenu de cet article a été vérifié dans l'environnement suivant.
Créez une sous-classe Fragment comme Activity. La classe Fragment existe dans les packages android.app et android.support.v4.app, Vous devez utiliser la classe de fragments de support v4. La classe Fragment qui corrige un bogue dans la classe Fragment du package android.app est stockée dans le support v4.
Comme l'activité, il y a un cycle de vie. La méthode du cycle de vie est profondément liée au cycle de vie de l'activité. Voici l'ordre dans lequel le fragment est ajouté par onCreate of Activity. Si la balise de fragment est décrite dans le fichier de mise en page de Activity et que le nom de classe complet de la classe de fragment est décrit dans l'attribut name, l'ordre n'est pas le suivant.
Méthode pour passer au premier plan
Méthode | La description |
---|---|
onAttach(Activity) * API niveau 23 ou supérieur sur Attach(Context) |
Méthode appelée lorsqu'elle est associée à une activité |
onCreate(Bundle) | Méthode appelée lors de la génération d'un fragment |
onCreateView(LayoutInflater, ViewGroup, Bundle) | Méthode appelée lors de la création d'une vue à afficher sous forme de fragment |
onActivityCreated(Bundle) | Méthode appelée lorsque le traitement de la méthode onCreate d'Activité est terminé |
onViewStateRestored(Bundle) | Méthode appelée lorsque la restauration du fragment enregistré dans l'état est terminée |
onStart() | Une méthode qui est appelée après l'exécution de la méthode onStart d'Activité et traite l'affichage de l'écran pour l'utilisateur. |
onResume() | Il est appelé après l'exécution de la méthode onResume d'Activité et attend un événement de l'utilisateur une fois le traitement terminé. |
Méthode pour être en arrière-plan
Méthode | La description |
---|---|
onPause() | Appelé juste avant l'exécution de la méthode onPause de l'activité. |
onStop() | Appelé juste avant l'exécution de la méthode onStop de Activity. |
onDestroyView() | Appelé avant la méthode onDestroy de Activity. Méthode appelée lors du nettoyage de la vue associée au fragment |
onDestroy() | Appelé avant la méthode onDestroy de Activity. Méthode appelée lors du nettoyage de l'état du fragment |
onDetach() | Appelé avant la méthode onDestroy de Activity. Une méthode appelée lors de la rupture de la connexion avec Activity |
Une application qui prépare un bouton et lorsque le bouton est enfoncé, un Fragment correspondant au bouton est généré et remplacé.
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="Nom: Casa Real Taro" />
<TextView
android:textSize="20sp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="Age: 33 ans" />
</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="Couleur préférée: 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);
}
}
La partie qui affiche les quatre boutons est également créée avec Fragmet. Comme un point ici, la méthode de la chaîne de caractères qui a été définie sur l'attribut onClick de la balise Button Si elle est définie, il s'agit d'une spécification liée, mais la classe qui implémente la méthode de l'attribut onClick doit être une activité contenant un fragment. </ b> Si vous l'implémentez avec Fragment, vous devez obtenir View avec findViewById et le définir avec setOnClickListener sans Fragment.
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);
}
}
Le fragment qui affiche quatre boutons est décrit par la balise
Appelez la méthode beginTransaction () de la classe FragmentManager pour obtenir le FragmentTransaction. Le fragment est remplacé par la méthode replace (). Après avoir défini le Fragment, appelez la méthode commit (). De plus, si vous souhaitez afficher le fragment précédent lorsque vous appuyez sur le bouton de retour, vous pouvez utiliser la synchronisation du paramètre Fragment. Doit être enregistré dans la pile arrière avec la méthode addToBackStack ().
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