Also habe ich diesen Code hier, ich erstelle ein neues Fragment und ersetze es durch ein anderes Fragment. Das funktioniert gut. Allerdings habe ich bemerkt, dass in der ersten Zeile der Konstruktor aufgerufen wird, aber der onAttach()
, onCreate()
usw. sind nicht. Wenn ich die zweite Zeile auskommentieren würde, würde das nicht funktionieren updateItem(URL)
erfordert ein WebView, das in der onCreate () - Funktion initiiert wird.
DetailViewFragment detailFragment = new DetailViewFragment();
//detailFragment.updateItem(URL);
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.displayList, detailFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
Würde jede Hilfe schätzen, die das mit der unkommentierten zweiten Zeile arbeiten lässt.
Das onAttach()
, onCreate()
usw. wird erst nach der FragmentManager
hat die Änderung tatsächlich begangen. Also, etwas später commit()
wird am Übergang genannt. Wenn Sie die URL an die Fragment
Fügen Sie es von Anfang an dem Argumentpaket des Fragments hinzu Vor du rufst an commit()
. Dann haben Sie Zugriff auf die URL in Ihrem onCreate()
oder andere Lebenszyklusmethoden. Du wirst also so etwas wollen:
DetailViewFragment detailFragment = new DetailViewFragment();
Bundle args = new Bundle();
args.putString(DetailViewFragment.INIT_URL, URL);
detailFragment.setArguments(args);
ft.replace(R.id.displayList, detailFragment);
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
ft.addToBackStack(null);
ft.commit();
Jetzt in deinem onCreate()
Du kannst anrufen getArguments()
um das Paket zu erhalten und die URL abzurufen, die von Ihrer Aktivität übergeben wurde.
API-Stufe 23 onAttach(Context context)
funktioniert
API-Stufe 22 onAttach(Activity activity)
funktioniert
Die Implementierung beider Methoden funktionierte für mich:
@Override
public void onAttach(Context context) {
super.onAttach(context);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
Eine andere Lösung wäre, anzurufen getSupportFragmentManager().executePendingTransactions();
kurz nach dem Commit. Pass auf, dass die Transcation dann synchron ist.