Ich bin ziemlich neu in android programmierung, also bitte mit mir ertragen. Ich habe versucht, über SO, tutorialspoint, große Nerdranch, usw. zu suchen, aber ich finde das nicht: wie mache ich ein Fragment persistent, nachdem ein Benutzer die Haupt- oder Übersichtsknöpfe gedrückt hat? Zum Beispiel:android fragment zerstört nach hause oder übersicht buttons sind gedrückt
Ich habe zwei Fragmente A und B in einer Aktivität mit einer Umschaltfläche, um zwischen den beiden Fragmenten zu wechseln. Standardmäßig wird das Fragment A beim Erstellen der Aktivität auf dem Bildschirm geladen. Wenn ich zu Fragment B wechsle und entweder Home oder Übersicht drücke und dann zur App zurückkehre, wird Fragment A angezeigt. Ich verstehe, warum es angezeigt wird, aber was ich nicht verstehe, ist, wie Fragment B angezeigt wird.
Ich habe über den Backstack, savedInstanceState und setRetainInstance (unter mehreren anderen) gelesen, aber nicht in der Lage, es herauszufinden.
Ich zwingend onAttach(Context context)
, onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
und onViewCreated(View view, Bundle savedInstanceState)
in beiden Fragmenten und onStart()
und onCreate(Bundle savedInstanceState)
in meiner Tätigkeit.
Fragmente:
@Override
public void onAttach(Context context) {
this.context = context;
faContext = (FragmentActivity) context;
super.onAttach(context);
}// end onAttach(Activity activity)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
Bundle bundle = this.getArguments();
if(bundle != null) {
String bundleAdminId = getString(R.string.bundle_admin_name);
adminName = bundle.getString(bundleAdminId);
}
else {
Log.d("BUNDLE_Profile", "bundle is null");
}
// Defines the xml file for the fragment
return inflater.inflate(R.layout.fragment_profile, parent, false);
}// end onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
onViewCreated
nur Schaltfläche Event-Handler hat
Aktivität:
@Override
public void onStart() {
super.onStart();
// start the home fragment
createFragment(new HomeFragment(), R.id.frag_container);
// update the local storage
}// end onStart()
private void createFragment(Fragment fragment, int fragContainerId) {
// make sure the passed fragment isn't null
if(fragment != null) {
FragmentTransaction ft = faContext.getSupportFragmentManager().beginTransaction();
ft.replace(fragContainerId, fragment);
ft.commit();
}
}// end createFragment(Fragment fragment)`
onCreate
hat auch Handler Taste
, warum Sie nicht Ihre Fragmente in der OnCreate Methode erstellen? –