yılında Fragment backstack temizlemek için nasıl selam ... işe yaramıyor mantık altındaandroid
for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) {
mFragmentManager.popBackStack();
}
yardım bana ..
yılında Fragment backstack temizlemek için nasıl selam ... işe yaramıyor mantık altındaandroid
for(int i = 0; i < mFragmentManager.getBackStackEntryCount(); ++i) {
mFragmentManager.popBackStack();
}
yardım bana ..
kullanmak geçmesine ama sadece ben yapabilirsiniz bu problemi kendim yaşadım. Yapabilirsiniz:
FragmentManager manager = getFragmentManager();
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
Oldukça açıklayıcı; sadece ilk girişi al, kimliğini al ve sonra her şeyi bu kimlikle birlikte gir. Yukarıdaki
tek yön etiketi etmektir kullanıyorum geri yığın parçasını nasıl temizleneceğini backstack
ve bunu "myfancyname"
Eğer addToBackStack
ile kullanılan dize eşleşmesi gerekir
mFragmentManager.popBackStack("myfancyname", FragmentManager.POP_BACK_STACK_INCLUSIVE);
temizlemek istediğinizde. Örneğin.
Fragment fancyFragment = new FancyFragment();
fragmentTransaction.replace(R.id.content_container, fancyFragment, "myfragmentag");
fragmentTransaction.addToBackStack("myfancyname");
backstack
adı ve veridiliminin etiket adı aynı olabilir ama orada hiçbir kısıtlar belgelere
kümesi ise itibaren bu konuda
üzerindedir ve adı veya kimliği bir arka yığını girdisi temin edilmiş ait, sonra tüm eşleşen girişleri eşleşme bulunduğunda yok veya yığının alt ulaşılana biri kadar tüketilen edilecektir. Aksi takdirde, bu giriş dahil olmak üzere en fazla girişi kaldırılacaktır.
Eğer backstack için bir ad kullanmak istemiyorsanız sen biraz daha geç bu
mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
nasıl isim backstack vermek do? –
Gokhan, isim backstack adı değil, Fragment'ın etiket adı. Onun örneği için, o haşhaş ettiği parça şu şekilde eklenecekti: 'mFragmentManager.beginTransaction(). Add (mFragment," myfancyname ");' –
Bu deneyin birinci parametreyi
mFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
Cevap neredeyse doğrudur, ancak boş olabilir gibi parçanın geri etrafında listesini bir bekçi gerekir:
private void clearBackStack() {
FragmentManager manager = getSupportFragmentManager();
if (manager.getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}
while (getSupportFragmentManager().getBackStackEntryCount() > 0){
getSupportFragmentManager().popBackStackImmediate();
}
Daha fazla detaylandırdıysanız, bu kabul edilen cevap olmalıdır. Tüm backstack'ı temizlemek istediğimiz şeydir – HaydenKai
Ama sonuncuyu gösteriyor. Genellikle, bundan sonra backstack için yeni bir parça eklersiniz. –
Buradaki bir uyarı, arka planın bir döngü içinde patlatılmasıdır, bunun gibi, ortaya çıktığı tüm parçalarda (oluşturma yöntemleri ve kapatma yöntemleri) yaşam döngüsü olaylarını arayarak, istenmeyen yan etkilere neden olabilirsiniz. –
gördüğüm en iyi seçenek burada.
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count > 0) {
getSupportFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
Aynı problemim var ve bu benim için işe yaramıyor! –
Lütfen bu en iyi çözümlerden biri olduğundan emin olun. Arka planı temizledikten hemen sonra yeni şeyler ekliyorsanız, popBackStackImmediate öğesini çağırmanız gerekebilir. – marsbear
Bu, yalnızca üst durumu açacak, birden fazla varsa backstack'i temizlemeyecektir. – Tapirboy