[Android / Java] Transition d'écran et traitement de retour par fragments

introduction

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.

Ce que j'ai appris

Vue d'ensemble de l'exemple d'application créé pour l'apprentissage

Une 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)

Structure du répertoire

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

Traitement du contenu de chaque fichier java

Code de fichier et description

Décrivez le code de chaque fichier

fichier de mise en page

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>

fichier java

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.

finalement

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.

Matériaux que j'ai utilisés comme référence

C'était très facile à comprendre et a été utile! Merci beaucoup!

Recommended Posts

[Android / Java] Transition d'écran et traitement de retour par fragments
[Android Studio] Transition d'écran par le bouton [Java]
De Java à C et de C à Java dans Android Studio
Traitement parallèle et parallèle dans divers langages (édition Java)
Représente le «jour suivant» et le «jour précédent» en Java / Android
Traitement asynchrone et intégration d'API Web dans Android Studio
Développement Android ~ transition d'écran (intention) ~
Traitement parallèle mesuré avec Java
Transition d'écran avec swing, java
JSON en Java et Jackson Partie 1 Renvoyer JSON à partir du serveur
Causes techniques et contre-mesures pour les points accro aux applications Android et Kotlin (1. Traitement de la transition d'écran Android (fragment))
Essayez d'implémenter Android Hilt en Java
Transition d'écran à l'aide de l'intention dans Kotlin
Exemple d'encodage et de décodage en Java
Traitement de la date en Java (LocalDate: Initialization)
Je veux revenir à l'écran précédent avec kotlin et java!
[Java] Traitement en boucle et table de quatre-vingt-dix-neuf
Transition d'écran par méthode Post [Java]
Arguments Java, valeurs de retour et surcharges
[Java Swing] Transition d'écran par CardLayout
Exécutez node.js depuis Android Java (traitement)
Classe StringBuffer et StringBuilder en Java
Prise en charge de IllegalArgumentException: aucune vue trouvée pour l'identifiant dans les fragments dans Android Java
Comprendre equals et hashCode en Java
A propos du traitement de la copie de fichiers en Java
[Android] Convertissez Map en JSON à l'aide de GSON avec Kotlin et Java
Remarques sur le traitement des threads Android (java)
[Java] Types d'exception et traitement de base
Bonjour tout le monde en Java et Gradle
[Android] Différence entre finish () et return;
Structure de l'application Web par Java et flux de traitement dans la couche de présentation
Transition d'activité avec refactoring de classe JAVA et instance expérimentée côté Android
Différence entre final et immuable en Java
Traitement des threads de l'interface utilisateur asynchrone Android
Différence entre les listes d'arry et les listes liées en Java
Programmer les en-têtes et pieds de page PDF en Java
Apprenez les modèles Flyweight et ConcurrentHashMap en Java
La direction de Java dans "C ++ Design and Evolution"
Lire et écrire des fichiers gzip en Java
Différence entre int et Integer en Java
Discrimination d'énum dans Java 7 et supérieur
Créer KeyStore et signer apk en cours de traitement (mode Android) (java peut être utilisé avec quelques modifications)
NLP4J [004] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique de l'analyse syntaxique en Java
Impressions et doutes sur l'utilisation de Java pour la première fois dans Android Studio
NLP4J [003] Essayez l'analyse de texte en utilisant le traitement du langage naturel et le traitement statistique des pièces en Java
Concernant les modificateurs transitoires et la sérialisation en Java
Détecter des vidéos similaires dans Java et OpenCV rev.2
Vulnérabilités et contre-mesures dans le traitement important (traitement des achats) (CSRF)
[Android / Java] Exploitez une base de données locale dans la salle
Différence entre next () et nextLine () dans Java Scanner
Différences dans l'écriture des classes Java, C # et Javascript
[Traitement × Java] Type de données et programmation orientée objet
[Android] Limite supérieure de l'alphabet et limite de longueur dans EditText
Capture et sauvegarde de l'installation de sélénium en Java
Détecter des vidéos similaires dans Java et OpenCV rev.3
Ajouter, lire et supprimer des commentaires Excel à l'aide de Java
Vérifier le comportement statique et public dans les méthodes Java
[Java] Comprenez en 10 minutes! Tableau associatif et HashMap