Soru & Cevap

Android studio fragmenti yığından kaldırma

26.11.2017 - 12:19

Merhabalar

Ben android studio ya yeni başlayanlardanım 

Projemde fragment kullanıyorum


FragmentManager fragmentManager = getFragmentManager();

FragmentTransaction ft = fragmentManager.beginTransaction();

FragmentAndroid fragmentAndroid = new FragmentAndroid();

ft.replace(R.id.content_frame, fragmentAndroid);

ft.addToBackStack(null);

ft.commit();
 

komutu ile fragmentleri yüklüyorum  ft.addToBackStack(null);  sayesinde geri tuşu ile bir önceki fragmente sorunsuz dönebiliyorum . normal fragmenti kapatıp önceki fragmenti yüklüyor. 

 

fakat projemde kullanıcı girişi sağladığım login fragmenti var. orda kullanıcı girişi sağlandıktan sonra yüklediğim fragment geri tuşunda tekrar login sayfasına dönsün istemiyorum. Ondan bir öncekine dönsün istiyorum. onun için komutta ft.addToBackStack(null); komutunu kullanmadım. Aslında istediğim gibi oldu ama ilginçtir geri tuşuna basınca mevcut fragmenti kapatmadan login öncesi fragmenti yüklüyo. yani fragmentler üst üste biniyo. Bu sorunu nasıl çözebilirim. 

 

Birde fragmentlerden birinde çıkış butonum var. Ona basınca daha önce açılmış tüm fragmentleri öldürüp ilk fragmenti yüklesin istiyorum bunu nasıl halledebilirim.

 

Bu konuda birkaç yazıokudum ama bir türlü olayi çözemedim. Yardımcı olursanız çok sevinirim...

 

260 Görüntülenme

1 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

Profile picture for user MelihDemircan
MelihDemircan
02.12.2019 - 07:57

Fragments arasında geçiş yaparken, FragmentTransaction'ınızın bir parçası olarak addToBackStack () öğesini çağırın:

 

FragmentTransaction tx = fragmentManager.beginTransation();
tx.replace( R.id.fragment, new MyFragment() ).addToBackStack( "tag" ).commit();

 

Daha ayrıntılı kontrole ihtiyacınız varsa (yani, bazı Fragmentler göründüğünde, geri tuşunu bastırmak istersiniz), parçanızın üst görünümünde bir OnKeyListener ayarlayabilirsiniz:

 

fragment.getView().setFocusableInTouchMode(true);
fragment.getView().requestFocus();
fragment.getView().setOnKeyListener( new OnKeyListener()
{
    @Override
    public boolean onKey( View v, int keyCode, KeyEvent event )
    {
        if( keyCode == KeyEvent.KEYCODE_BACK )
        {
            return true;
        }
        return false;
    }
} );