Android parçasının arka istifinin çalışma şekliyle ilgili büyük bir sorunum var ve sunulan herhangi bir yardım için çok minnettar olurum.
3 Parçanız olduğunu hayal edin
[1] [2] [3]
Kullanıcının gidebilmesini istiyorum, [1] > [2] > [3]
ancak geri dönerken (geri düğmesine basarak) [3] > [1]
.
Tahmin ettiğim gibi addToBackStack(..)
, bu, parçayı [2]
XML'de tanımlanan parça tutucuya getiren işlemi oluştururken çağırmamakla başarılabilirdi .
Ben istemiyorum eğer sanki bu gerçeği görünüyor [2]
kullanıcı presler üzerinde geri düğmesini tekrar görünmesini [3]
, ben deme addToBackStack
işlem olduğunu göstermektedir parçası içinde [3]
. Bu tamamen sezgisel görünüyor (belki de iOS dünyasından geliyor).
Her neyse, bu şekilde yaparsam, [1] > [2]
geri gidip geri bastığımda [1]
beklendiği gibi geri gelirim .
Gidip [1] > [2] > [3]
sonra geri basarsam [1]
(beklendiği gibi) geri atlarım . Şimdi [2]
tekrar denediğimde tuhaf davranış oluyor [1]
. Öncelikle, [3]
görünmeden önce kısaca görüntülenir [2]
. Bu noktada geri basarsam [3]
görüntülenir ve bir kez daha geri basarsam uygulamadan çıkılır.
Burada neler olup bittiğini anlamama yardım eden var mı?
Ve işte ana etkinliğim için düzen xml dosyası:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<fragment
android:id="@+id/headerFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
class="com.fragment_test.FragmentControls" >
<!-- Preview: layout=@layout/details -->
</fragment>
<FrameLayout
android:id="@+id/detailFragment"
android:layout_width="match_parent"
android:layout_height="fill_parent"
/>
Güncelle Bu, nav heirarchy tarafından oluşturmak için kullandığım koddur
Fragment frag;
FragmentTransaction transaction;
//Create The first fragment [1], add it to the view, BUT Dont add the transaction to the backstack
frag = new Fragment1();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.commit();
//Create the second [2] fragment, add it to the view and add the transaction that replaces the first fragment to the backstack
frag = new Fragment2();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.addToBackStack(null);
transaction.commit();
//Create third fragment, Dont add this transaction to the backstack, because we dont want to go back to [2]
frag = new Fragment3();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.commit();
//END OF SETUP CODE-------------------------
//NOW:
//Press back once and then issue the following code:
frag = new Fragment2();
transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.detailFragment, frag);
transaction.addToBackStack(null);
transaction.commit();
//Now press back again and you end up at fragment [3] not [1]
Çok teşekkürler