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 FragmentManager
den Erwerb von Fragment
Verfahren Segment Rufkennungen. Oder mit der neuen Objekt Call - Methode, zum Beispiel:
ExampleFragment Fragment = (ExampleFragment) getSupportFragmentManager (). findFragmentById (R id .example_fragment.);