Android - J'ai besoin de quelques éclaircissements sur les fragments par rapport aux activités et aux vues



Answers

  1. Le fragment fait partie d'une activité, qui apporte sa propre interface à cette activité. Le fragment peut être pensé comme une sous-activité. Où comme l'écran complet avec lequel l'utilisateur interagit est appelé comme activité. Une activité peut contenir plusieurs fragments. Les fragments sont principalement une sous-partie d'une activité.

  2. Une activité peut contenir 0 ou plusieurs nombre de fragments en fonction de la taille de l'écran. Un fragment peut être réutilisé dans plusieurs activités, de sorte qu'il agit comme un composant réutilisable dans les activités.

  3. Un fragment ne peut pas exister indépendamment. Cela devrait toujours faire partie d'une activité. Où l'activité peut exister sans aucun fragment dedans.

Question

Dans Android API 11+, Google a publié une nouvelle classe appelée Fragment .

Dans les vidéos, Google suggère que chaque fois que possible ( link1 , link1 ), nous devrions utiliser des fragments au lieu des activités, mais ils n'ont pas expliqué exactement pourquoi.

Quel est le but des fragments et de leurs utilisations possibles (autres que certains exemples d'interface utilisateur qui peuvent facilement être obtenus par des vues / mises en page simples)?

Ma question concerne les fragments:

  1. Quels sont les objectifs de l'utilisation d'un fragment?
  2. Quels sont les avantages et les inconvénients de l'utilisation de fragments par rapport à l'utilisation d'activités / vues / mises en page?

Questions bonus

  1. Pouvez-vous donner des utilisations vraiment intéressantes pour les fragments? Des choses que Google n'a pas mentionné dans leurs vidéos?
  2. Quelle est la meilleure façon de communiquer entre les fragments et les activités qui les contiennent?
  3. Quelles sont les choses les plus importantes à retenir lorsque vous utilisez des fragments? Des conseils et des avertissements de votre expérience?



Un fragment représente un comportement ou une partie de l'interface utilisateur dans une activité. Vous pouvez combiner plusieurs fragments dans une seule activité pour créer une interface utilisateur à plusieurs volets et réutiliser un fragment dans plusieurs activités. Vous pouvez considérer un fragment comme une section modulaire d'une activité, qui a son propre cycle de vie, reçoit ses propres événements d'entrée et que vous pouvez ajouter ou supprimer pendant l'exécution de l'activité.

  • vous pouvez manipuler chaque fragment indépendamment, comme les ajouter ou les supprimer. Lorsque vous effectuez une telle transaction de fragment, vous pouvez également l'ajouter à une pile arrière gérée par l'activité: chaque entrée de pile arrière dans l'activité est un enregistrement de la transaction de fragment qui s'est produite. La pile arrière permet à l'utilisateur d'inverser une transaction fragmentée (revenir en arrière), en appuyant sur le bouton Retour.

  • Lorsque vous ajoutez un fragment dans votre structure d'activité, il se trouve dans un ViewGroup à l'intérieur de la hiérarchie de vue de l'activité et le fragment définit sa propre disposition. Vous pouvez insérer un fragment dans votre présentation d'activité en déclarant le fragment dans le fichier de disposition de l'activité, en tant qu'élément, ou à partir du code de votre application en l'ajoutant à un ViewGroup existant. Cependant, un fragment n'est pas requis pour faire partie de la structure de l'activité; Vous pouvez également utiliser un fragment sans sa propre interface utilisateur en tant que travailleur invisible pour l'activité.

  • Par exemple: Si vous utilisiez NavigationDrawer sans Fragments, il serait préférable de conserver l'instance NavigationDrawer dans une seule activité et lorsque vous naviguez dans l'application en choisissant parmi les éléments de NavigationDrawer, chacune des activités démarrées ne devrait pas implémenter NavigationDrawer mais devrait plutôt implémenter le bouton de retour pour revenir à l'activité "principale" / unique dans laquelle le NavigationDrawer a été implémenté.

    Remarque: Si vous souhaitez implémenter NavigationDrawer dans plusieurs activités, vous devrez recréer une nouvelle instance de NavigationDrawer dans chaque activité que vous souhaitez afficher.

    Je suppose que ce serait un inconvénient par rapport à l'utilisation de fragments, alors que si vous utilisiez un fragment, vous n'auriez pas besoin de nombreuses instances du tiroir dont vous auriez besoin d'un seul.

    Tiroir avec des fragments au lieu des activités

    Si vous utilisez NavigationDrawer avec des fragments, le tiroir doit être implémenté dans une seule activité et lorsque chaque élément de tiroir est sélectionné, leur contenu est affiché dans chacun de leurs propres fragments.

  • Communiquer entre fragment pour son activité : Pour permettre à un fragment de communiquer jusqu'à son activité, vous pouvez définir une interface dans la classe Fragment et l'implémenter dans l'activité. Le fragment capture l'implémentation de l'interface pendant sa méthode de cycle onAttach (). appelez les méthodes d'interface afin de communiquer avec l'activité.

    public class YourFragment extends ListFragment {
    OnSelectedListener mCallback;
    
    // Container Activity must implement this interface
    public interface OnSelectedListener {
        public void onItemSelected(int position);
    }
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.your_view, container, false);
    }
    
    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
    
        // This makes sure that the container activity has implemented
        // the callback interface. If not, it throws an exception
        try {
            mCallback = (OnSelectedListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString()
                    + " must implement OnSelectedListener");
        }
    }
    
    }...
    

Le fragment peut maintenant envoyer des messages à l'activité en appelant la méthode onItemSelected () (ou d'autres méthodes dans l'interface) à l'aide de l'instance mCallback de l'interface OnSelectedListener.

public static class MainActivity extends Activity
        implements YourFragment.OnSelectedListener{
    ...

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_activity);
    }

    public void onItemSelected(int position) {
        // The user selected the headline of an article from the YourFragment
        // Do something here to display that article

        YourFragment yourFrag = (YourFragment)
                getSupportFragmentManager().findFragmentById(R.id.your_fragment);

        if (yourFrag != null) {
            // If your frag is available, we're in two-pane layout...

            // Call a method in the YourFragment to update its content
            yourFrag.updateView(position);
        } else {
            // Otherwise, we're in the one-pane layout and must swap frags...

            // Create fragment and give it an argument for the selected item
            YourFragment newFragment = new YourFragment();
            Bundle args = new Bundle();
            args.putInt(YourFragment.ARG_POSITION, position);
            newFragment.setArguments(args);

            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

            // Replace whatever is in the fragment_container view with this fragment,
            // and add the transaction to the back stack so the user can navigate back
            transaction.replace(R.id.fragment_container, newFragment);
            transaction.addToBackStack(null);

            // Commit the transaction
            transaction.commit();
        }
    }
}



Un fragment vit à l'intérieur d'une activité.

Alors qu'une activité vit sur elle-même.




Un fragment est une partie de l'interface utilisateur ou du comportement d'une application qui peut être placée dans une activité qui permet une conception d'activité plus modulaire. Ce ne sera pas faux si nous disons qu'un fragment est une sorte de sous-activité.

Voici les points importants sur un fragment:

  1. Un fragment a sa propre disposition et son propre comportement avec ses propres rappels de cycle de vie.

  2. Vous pouvez ajouter ou supprimer des fragments dans une activité pendant l'exécution de l'activité.

  3. Vous pouvez combiner plusieurs fragments dans une seule activité pour créer une interface utilisateur à plusieurs volets.

  4. Un fragment peut être utilisé dans plusieurs activités.

  5. Le cycle de vie du fragment est étroitement lié au cycle de vie de son activité hôte.

  6. Lorsque l'activité est en pause, tous les fragments disponibles dans l'acivité seront également arrêtés.

  7. Un fragment peut implémenter un comportement qui n'a aucun composant d'interface utilisateur.

  8. Les fragments ont été ajoutés à l'API Android dans Android 3 (Honeycomb) avec la version 11 de l'API.

Pour plus de détails, veuillez visiter le site officiel, Fragments .




Les fragments sont particulièrement utiles dans certains cas, par exemple lorsque nous voulons conserver un tiroir de navigation dans toutes nos pages. Vous pouvez gonfler une disposition d'image avec le fragment que vous voulez et avoir toujours accès au tiroir de navigation.

Si vous aviez utilisé une activité, vous auriez dû conserver le tiroir dans toutes les activités ce qui rend le code redondant. C'est une utilisation intéressante d'un fragment.

Je suis nouveau sur Android et pense toujours qu'un fragment est utile de cette façon.






Links