Android Fragment Verwendungszweck

Zusammenfassung:

1, fügen Sie das Original-Fragment überschreibt, hinzugefügt, um ein neues Fragment nach dem ursprünglichen Fragmente noch am Leben

2, ersetzen ist all das Fragment aus der gleichen ID zu entfernen, dann fügen Sie das aktuelle Fragment

Von der Leistung wird empfohlen , ersetzen zu verwenden ( im Zweifelsfall dann unter Studie )

1, Add, ersetzen, und zwar unabhängig davon, ob oder nicht addToBackStack hinzuzufügen, zu Fuß würde der Zyklus wieder fragmentieren;

2, fragmenta und FragmentB ersetzen schalten das gleiche Fragment wird der Lebenszyklus nicht nehmen würde.

3, fragmenta wechseln und ersetzen FragmentB nicht addToBackStack hinzuzufügen, jedes Mal das aktuelle Fragment zerstört werden, und dann ein neues Fragment hinzufügen möchten, nehmen alle Lebenszyklus.

4, fragmenta und FragmentB geschaltet Add addToBackStack ersetzen, wird nicht das aktuelle Fragment zerstören.

Zunächst wird der Lebenszyklus

Zweitens ist die Differenz hinzufügen, ersetzen, show, hide Methode

Rufen Sie die Add-Methode

 getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment, homeFragmentA)
                .commit();

Rufen Sie an und ersetzen Methoden 

        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment, homeFragmentA)
                .commit();

 

hinzufügen, ersetzen, und zwar unabhängig davon, ob oder nicht addToBackStack hinzufügen, Protokolle sind wie folgt: 

 com.heima.mynewdemo E/HomeFragmentA====: onAttach
 com.heima.mynewdemo E/HomeFragmentA====: onCreate
 com.heima.mynewdemo E/HomeFragmentA====: onCreateView
 com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
 com.heima.mynewdemo E/HomeFragmentA====: onStart
 com.heima.mynewdemo E/HomeFragmentA====: onResume
 com.heima.mynewdemo E/HomeFragmentA====: onPause
 com.heima.mynewdemo E/HomeFragmentA====: onStop
 com.heima.mynewdemo E/HomeFragmentA====: onDestroyView
 com.heima.mynewdemo E/HomeFragmentA====: onDestroy
 com.heima.mynewdemo E/HomeFragmentA====: onDetach

Ersetzen Sie die Verwendung von homeFragmentA, homeFragmentB wechseln:

1, ersetzen das gleiche Fragment wird nicht den Lebenszyklus zu nehmen.

2, mit dem Schalter ersetzen

        homeFragmentA = new HomeFragmentA();
        homeFragmentB = new HomeFragmentB();

        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment, homeFragmentA)
                .commit();

        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "添加", Toast.LENGTH_SHORT).show();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fragment, homeFragmentA, "homeFragment")
                        .commit();

            }
        });
        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fragment, homeFragmentB)
                        .commit();
            }
        });
    }

Log ist wie folgt: 

2020-03-26 09:17:18.620 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onAttach
2020-03-26 09:17:18.620 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onCreate
2020-03-26 09:17:18.621 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onCreateView
2020-03-26 09:17:18.622 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
2020-03-26 09:17:18.622 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onStart
2020-03-26 09:17:18.623 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onResume
2020-03-26 09:17:25.818 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onAttach
2020-03-26 09:17:25.818 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onCreate
2020-03-26 09:17:25.819 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onPause
2020-03-26 09:17:25.819 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onStop
2020-03-26 09:17:25.819 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onDestroyView
2020-03-26 09:17:25.821 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onDestroy
2020-03-26 09:17:25.821 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onDetach
2020-03-26 09:17:25.823 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onCreateView
2020-03-26 09:17:25.823 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onActivityCreated
2020-03-26 09:17:25.823 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onStart
2020-03-26 09:17:25.823 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onResume
2020-03-26 09:17:34.905 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onAttach
2020-03-26 09:17:34.905 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onCreate
2020-03-26 09:17:34.906 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onPause
2020-03-26 09:17:34.906 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onStop
2020-03-26 09:17:34.906 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onDestroyView
2020-03-26 09:17:34.907 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onDestroy
2020-03-26 09:17:34.907 10090-10090/com.heima.mynewdemo E/HomeFragmentB====: onDetach
2020-03-26 09:17:34.914 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onCreateView
2020-03-26 09:17:34.914 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
2020-03-26 09:17:34.914 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onStart
2020-03-26 09:17:34.914 10090-10090/com.heima.mynewdemo E/HomeFragmentA====: onResume

Zusammenfassung: Jedes Mal, wenn das aktuelle Fragment zerstört werden, und dann ein neues Fragment hinzufügen mag, nimmt alle Lebenszyklen: 

3. Fügen Sie addToBackStack

        homeFragmentA = new HomeFragmentA();
        homeFragmentB = new HomeFragmentB();

        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment, homeFragmentA)
                .addToBackStack(null)
                .commit();

        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "添加", Toast.LENGTH_SHORT).show();
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fragment, homeFragmentA, "homeFragment")
                        .addToBackStack(null)
                        .commit();

            }
        });
        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getSupportFragmentManager().beginTransaction()
                        .replace(R.id.fragment, homeFragmentB)
                        .addToBackStack(null)
                        .commit();
            }
        });
    }

Log ist wie folgt: 

2020-03-26 09:22:53.012 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onAttach
2020-03-26 09:22:53.012 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onCreate
2020-03-26 09:22:53.013 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onCreateView
2020-03-26 09:22:53.014 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
2020-03-26 09:22:53.014 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onStart
2020-03-26 09:22:53.015 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onResume
2020-03-26 09:23:10.081 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onAttach
2020-03-26 09:23:10.081 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onCreate
2020-03-26 09:23:10.081 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onPause
2020-03-26 09:23:10.082 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onStop
2020-03-26 09:23:10.082 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onDestroyView
2020-03-26 09:23:10.085 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onCreateView
2020-03-26 09:23:10.085 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onActivityCreated
2020-03-26 09:23:10.085 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onStart
2020-03-26 09:23:10.085 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onResume
2020-03-26 09:23:44.288 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onPause
2020-03-26 09:23:44.288 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onStop
2020-03-26 09:23:44.288 10631-10631/com.heima.mynewdemo E/HomeFragmentB====: onDestroyView
2020-03-26 09:23:44.290 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onCreateView
2020-03-26 09:23:44.291 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
2020-03-26 09:23:44.291 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onStart
2020-03-26 09:23:44.291 10631-10631/com.heima.mynewdemo E/HomeFragmentA====: onResume

Zusammenfassung: Fragment, das erstellt wurde, nicht zerstört werden;

4, hinzufügen, mit der Haut, zeigt die Verwendung


        homeFragmentA = new HomeFragmentA();
        homeFragmentB = new HomeFragmentB();
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment, homeFragmentA)
                .add(R.id.fragment, homeFragmentB)
                .show(homeFragmentA)
                .hide(homeFragmentB)
//                .addToBackStack(null)
                .commit();

        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "添加A", Toast.LENGTH_SHORT).show();
                getSupportFragmentManager().beginTransaction()
                        .show(homeFragmentA)
                        .hide(homeFragmentB)
//                        .addToBackStack(null)
                        .commit();

            }
        });
        findViewById(R.id.btn2).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(MainActivity.this, "添加B", Toast.LENGTH_SHORT).show();
                getSupportFragmentManager().beginTransaction()
                        .show(homeFragmentB)
                        .hide(homeFragmentA)
//                        .addToBackStack(null)
                        .commit();
            }
        });
    }

Log ist wie folgt:

2020-03-26 09:42:58.790 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onAttach
2020-03-26 09:42:58.790 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onCreate
2020-03-26 09:42:58.791 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onAttach
2020-03-26 09:42:58.791 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onCreate
2020-03-26 09:42:58.792 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onCreateView
2020-03-26 09:42:58.792 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onActivityCreated
2020-03-26 09:42:58.793 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onCreateView
2020-03-26 09:42:58.793 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onActivityCreated
2020-03-26 09:42:58.793 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onStart
2020-03-26 09:42:58.793 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onStart
2020-03-26 09:42:58.795 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onResume
2020-03-26 09:42:58.795 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onResume
2020-03-26 09:43:05.875 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onPause
2020-03-26 09:43:05.875 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onPause
2020-03-26 09:43:06.315 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onStop
2020-03-26 09:43:06.316 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onStop
2020-03-26 09:43:06.317 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onDestroyView
2020-03-26 09:43:06.318 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onDestroy
2020-03-26 09:43:06.318 14718-14718/com.heima.mynewdemo E/HomeFragmentA====: onDetach
2020-03-26 09:43:06.319 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onDestroyView
2020-03-26 09:43:06.319 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onDestroy
2020-03-26 09:43:06.319 14718-14718/com.heima.mynewdemo E/HomeFragmentB====: onDetach

Drittens ist die grundlegende Verwendung von Fragment

1 Hinweise AndroidX in Fragmente Verwendung, Aktivität muss erben AppCompatActivity, Verwendung getSupportFragmentManager ()

2 Hinweise Fragment verwendet in Android, Aktivität erben müssen Aktivität Verwendung getFragmentManager ()

package com.heima.googledemo;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;


public class MainActivity extends AppCompatActivity {
    private ImageView image;
    private TextView text;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        text = findViewById(R.id.text);
        text.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
        //Android
        getFragmentManager().beginTransaction()
                .add(R.id.fragment_container, homeFragment)
                .add(R.id.fragment_container, homeFragmentB)
                .show(homeFragment)
                .hide(homeFragmentB)
                .addToBackStack(null)
                .commit();


        //AndroidX
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment, homeFragment)
                .add(R.id.fragment, homeFragmentB)
                .show(homeFragment)
                .hide(homeFragmentB)
                .addToBackStack(null)
                .commit();
            }
        });
    }
}

 

Vier, Fragment Kommunikation mit Aktivität

1, erhalten die Ansicht Aktivität im Fragment

Ansicht view = getActivity (). FindViewById (R.id.text)

2. In ähnlicher Weise können Sie auch die Aktivität verwenden findFragmentById()oder findFragmentByTag()von durch FragmentManagerden Erwerb von FragmentVerfahren Segment Rufkennungen. Oder mit der neuen Objekt Call - Methode, zum Beispiel:

 ExampleFragment Fragment = (ExampleFragment) getSupportFragmentManager (). findFragmentById (R id .example_fragment.); 

 

 

 

 

 

Veröffentlicht 49 Originalarbeiten · erntete Lob 2 · Aufrufe 8595

Ich denke du magst

Origin blog.csdn.net/yangjunjin/article/details/104716412
Empfohlen
Rangfolge