J'apprends à développer des applications mobiles à l'aide de Java dans Android Studio. Je n'ai pas mis beaucoup d'efforts dans le fichier de mise en page (en gros). Je n'ai pas utilisé le fichier de chaîne parce que je me suis concentré sur l'opération de changement d'écran.
FragmentManager ''
FragmentTransaction '' (transition d'écran)
popBackStack`` Retourne l'opération en cliquant sur le bouton retourUne application simple qui vous permet de préparer le fragment principal pour une activité et de basculer entre les deux fragments en appuyant sur un bouton à partir de là. Activité 1 Fragment: 3 (1 principal, 2 sous)
Cliquez sur ces boutons ① et ② pour passer respectivement au sous-fragment 1 et au sous-fragment 2.
Écran principal (MainFragment) |
---|
Écran Sub1 (SubFragment1) |
---|
Écran Sub2 (SubFragment2) |
---|
MainActivity.java --Affichage du fragment principal --Définissez une méthode pour afficher le bouton "←" qui retourne à la barre d'action de SubFragment.
MainFragment.java --Définissez une méthode pour changer l'affichage du fragment --Cliquez sur le bouton installé Appel d'une méthode pour basculer entre l'écouteur et le fragment
SubFragment(1, 2).java --Affichage du bouton pour revenir à la barre d'action
Décrivez le code de chaque fichier
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="C'est le fragment principal"/>
<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="C'est le sous-fragment 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="Sous-fragment 2" />
</FrameLayout>
MainActivity.java
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Appeler la méthode et afficher MainFragment par défaut
addFragment(new MainFragment());
}
//Définissez une méthode pour afficher le fragment (transmettez le fragment que vous souhaitez afficher en argument)
private void addFragment(Fragment fragment) {
//Obtenez Fragment Manager
FragmentManager manager = getSupportFragmentManager();
//Démarrer la transaction de fragment
FragmentTransaction transaction = manager.beginTransaction();
//Fragment principal ajouté
transaction.add(R.id.activityMain, fragment);
//Commettre une transaction fragmentée. L'état du fragment est reflété par la validation
transaction.commit();
}
//Définir une méthode pour placer le bouton de retour "←" sur la barre d'action (barre supérieure)
public void setupBackButton(boolean enableBackButton) {
//Obtenir la barre d'action
ActionBar actionBar = getSupportActionBar();
//Réglez le bouton "←" pour revenir à la barre d'action (l'argument est vrai):Affichage, faux:Caché)
actionBar.setDisplayHomeAsUpEnabled(enableBackButton);
}
}
Je veux afficher le fragment spécifié sur l'affichage à l'écran, alors faites transaction.add
Entrez une telle valeur comme argument
transaction.add (valeur R de la partie de l'écran de mise en page à ajouter, objet Fragment à ajouter (à afficher));
MainFragment.java
MainFragment.java
public class MainFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Gonflez l'écran affiché sous forme de fragment à partir du fichier de mise en page
View view = inflater.inflate(R.layout.fragment_main, container, false);
//Obtenez l'activité parentale à laquelle vous appartenez
MainActivity activity = (MainActivity) getActivity();
//Définissez le titre sur la barre d'action
activity.setTitle("Fragment principal");
//Masquer le bouton de retour (le fragment principal ne nécessite pas de bouton de retour)
//Si vous ne définissez pas ce paramètre sur false, le bouton de retour restera affiché lors du retour du sous-fragment.
activity.setupBackButton(false);
//Obtenir un élément de bouton
Button bt1 = view.findViewById(R.id.bt1);
Button bt2 = view.findViewById(R.id.bt2);
//① Traitement lorsque le bouton est cliqué
bt1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Transition vers SubFragment1
replaceFragment(new SubFragment1());
}
});
//② Traitement lorsque le bouton est cliqué
bt2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Transition vers SubFragment2
replaceFragment(new SubFragment2());
}
});
return view;
}
//Définissez une méthode pour changer le fragment à afficher (passez le fragment que vous souhaitez afficher en argument)
private void replaceFragment(Fragment fragment) {
//Obtenez Fragment Manager
FragmentManager manager = getFragmentManager(); //GetSupportFragmentManager en activité()?
//Démarrer la transaction de fragment
FragmentTransaction transaction = manager.beginTransaction();
//Mise en page remplacée par un fragment (ajouté)
transaction.replace(R.id.activityMain, fragment);
//Enregistrez la transaction de remplacement dans la pile arrière
transaction.addToBackStack(null);
//Commit Fragment Transaction
transaction.commit();
}
}
J'ai déjà affiché le fragment principal et je souhaite changer d'affichage en cliquant sur un bouton, utilisez donc transaction.replace
L'argument est la même image que le traitement de `ʻadd
transaction.replace (valeur R de la partie de l'écran de mise en page à afficher, objet Fragment à remplacer (à afficher)); ``
Pour les sous-fragments qui sont passés du fragment principal, nous voulons pouvoir revenir au fragment principal avec le bouton de retour "←" sur la barre d'action.
transaction.addToBackStack(null);
En décrivant, le fragment affiché avant la transition est enregistré.
Avec cette description, dans le fragment de destination de transition
getFragmentManager().popBackStack();
En appelant, vous pourrez revenir en cliquant sur le bouton retour "←"
SubFragment1.java / SubFragment2.java
SubFragment1.java
public class SubFragment1 extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
//Gonflez l'écran affiché sous forme de fragment à partir du fichier de mise en page
View view = inflater.inflate(R.layout.fragment_sub1, container, false);
//Obtenir une activité parentale affiliée
MainActivity activity = (MainActivity) getActivity();
//Définissez le titre sur la barre d'action
activity.setTitle("Sous-fragment 1");
//Afficher le bouton de retour
activity.setupBackButton(true);
//Avec cette description, le menu de la barre d'actions peut être utilisé dans le fragment
setHasOptionsMenu(true);
return view;
}
//Traitement lorsque le bouton de la barre d'action est enfoncé
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
// android.R.id.Détecte l'opération lorsque le bouton de retour "←" est enfoncé à la maison
case android.R.id.home:
//Exécute le processus pour revenir au fragment affiché avant la transition
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) {
//Gonflez l'écran affiché sous forme de fragment à partir du fichier de mise en page
View view = inflater.inflate(R.layout.fragment_sub2, container, false);
//Obtenir une activité parentale affiliée
MainActivity activity = (MainActivity) getActivity();
//Définissez le titre sur la barre d'action
activity.setTitle("Sous-fragment 2");
//Afficher le bouton de retour
activity.setupBackButton(true);
//Avec cette description, le menu de la barre d'actions peut être utilisé dans le fragment
setHasOptionsMenu(true);
//La vue est bonne?
return view;
}
//Traitement lorsque le bouton de la barre d'action est enfoncé
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
//Lorsque le bouton de retour "←" est enfoncé android.R.id.La valeur est entrée dans la maison
case android.R.id.home:
//Exécute le processus pour revenir au fragment affiché avant la transition
getFragmentManager().popBackStack();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
getFragmentManager (). PopBackStack ();
Cette description retourne au fragment précédent.
Je ne l'ai pas inclus dans le contenu cette fois, mais j'espère pouvoir écrire à l'avenir sur le transfert de données entre fragments.
Je suis débutant depuis moins d'un mois depuis que j'ai commencé à apprendre Java / Android. Si vous avez des suggestions, veuillez commenter.
C'était très facile à comprendre et a été utile! Merci beaucoup!
Recommended Posts