hangi parçanın başka bir parçayı aradığını bilmek nasıl?

Android'de bu sorun var. Üç Fragment göz önünde bulundurun: A , B , C . C , A 'dan veya B ' den çağrılabilir. Hangi koddan C çağrıldığını bilmek yine de var mı?

Düzenlendi

Tamam millet, ne yapmaya çalıştığımı açıklayacağım. Diyelim ki bu çağrı bende: A B, B C.

C'deki geri düğmesine bastığımda beni B'ye götürüyor, sorun değil. Fakat tekrar geri düğmesine bastığımda, beni A yerine C'ye götürüyor.

Bu benim kodum:

@Override
public void onBackPressed() { 

    //this is the current fragment
    Fragment fragmentActual =     this.getSupportFragmentManager().findFragmentById(android.R.id.tabcontent);

    String fragmentTag = fragmentoActual.getTag().toString();

            //If I press the back button in C:
    if(fragmentTag.equals("TAG C")){

        Fragment removefragment = this.getSupportFragmentManager().findFragmentByTag("TAG B");
        Fragment fragmentClient = this.getSupportFragmentManager().findFragmentByTag("TAG C");

        //If Im NOT passing arguments to B, I know this is a new form
        if(removefragment.getArguments()== null){

                            //I always pass arguments to fragment C, but just in case:
            if(fragmentClient.getArguments()!= null){

                Bundle mArguments = fragmentClient.getArguments();

                                    //FRAGMENT B
                FragmentB  fragmentB = new FragmentB ();
                fragment.setArguments(mArguments);

                FragmentManager manager = this.getSupportFragmentManager();
                FragmentTransaction ft = manager.beginTransaction();


                ft.addToBackStack(null);
                    ft.replace(android.R.id.tabcontent,fragmentB,"TAG B");
                    ft.commit();
                }
        }else{

            super.onBackPressed();
        }

    }else{
        super.onBackPressed();
    }

}   

Şimdi kodu açıklayacağım. Temel olarak yaptığı şey, C parçası çağrıldığında B parçasını değiştirmek. Bunu yapıyorum, çünkü B parçasına argümanları iletmem gerekiyor çünkü Fakat B parçasını değiştirdiğimde, B parçasının "geçmişi" kayboluyor, yani B'deki düğmeye tekrar bastığımda, A parçasına geri dönemem. güçlü> (KİMİ ARAYALANABİLECEĞİMİ BİLECEĞİMDE BURAYA NEDEN İSTİYORUM İSTİYORUM) .

B parçasını çağırdığımda atılma zamanı, boş bir form olduğu için argümanları geçemiyorum. Ama C'ye çağırdığımda, B'de kaldığımda, B parçasına argümanlar iletmem gerekiyor (geri düğmesine basıldığında), böylece güncellenmiş bilgileri gösterebilir.

Lütfen net olmayan bir şey varsa, beni daha iyi açıklayabilmek için bana bildirin.

Edited 2: This issue has something with this https://stackoverflow.com/questions/16703604/back-press-button-when-i-save-a-form-for-the-first-time-a-list-view-is-not-updat. Maybe it does my idea more clear.

1
Bana biraz daha bahseder misin?
katma yazar kiduxa, kaynak
Bana biraz daha bahseder misin?
katma yazar kiduxa, kaynak
Benim durumumda buna ihtiyacım var, çünkü onBackButtonPressed sorunum var. Bilmeliyim ki, kimin kime çağıracağını, böylece geri düğmesine basıldığında kullanılan parçayı geri verebilirim.
katma yazar kiduxa, kaynak
Benim durumumda buna ihtiyacım var, çünkü onBackButtonPressed sorunum var. Bilmeliyim ki, kimin kime çağıracağını, böylece geri düğmesine basıldığında kullanılan parçayı geri verebilirim.
katma yazar kiduxa, kaynak
Sorumu değiştirdim, lütfen bir göz atın
katma yazar kiduxa, kaynak
Sorumu değiştirdim, lütfen bir göz atın
katma yazar kiduxa, kaynak
Android'in introspection yeteneklerini arıyorsun.
katma yazar fotanus, kaynak
Bir parça, başka hangi parçanın "adlandırıldığını" bilmek zorunda olmamalıdır.
katma yazar Luksprog, kaynak
Bir parça, başka hangi parçanın "adlandırıldığını" bilmek zorunda olmamalıdır.
katma yazar Luksprog, kaynak
Bu sorunların üstesinden gelmek isteyebilirsiniz. Her zaman veriyi içeren bir Paket iletme seçeneğine, onu arayan kişiyi yeni oluşturulan bölüme geçirme seçeneğiniz vardır. Ardından, parçada getArgument() öğesini kullanmak, onu kimin aradığını bilir.
katma yazar Luksprog, kaynak
Bu sorunların üstesinden gelmek isteyebilirsiniz. Her zaman veriyi içeren bir Paket iletme seçeneğine, onu arayan kişiyi yeni oluşturulan bölüme geçirme seçeneğiniz vardır. Ardından, parçada getArgument() öğesini kullanmak, onu kimin aradığını bilir.
katma yazar Luksprog, kaynak

8 cevap

Luksprog'un cevabı bence en iyisidir: "Bu meselelerle uğraşmak isteyebilirsiniz. Her zaman, yeni bir araya getirilen parçaya, kimin adını verdiğini belirten bir veri içeren bir Paket iletme seçeneğiniz vardır. Ardından parçada getArgument() yönteminin kullanılması kim çağırdı. "

Daha iyi bir yol bulamadım.

3
katma

Luksprog'un cevabı bence en iyisidir: "Bu meselelerle uğraşmak isteyebilirsiniz. Her zaman, yeni bir araya getirilen parçaya, kimin adını verdiğini belirten bir veri içeren bir Paket iletme seçeneğiniz vardır. Ardından parçada getArgument() yönteminin kullanılması kim çağırdı. "

Daha iyi bir yol bulamadım.

3
katma
1
katma
1
katma

You can use FragmentManager for creating a back stack of your fragments. You also have to work with Fragment Transactions first. Further informations see: http://developer.android.com/guide/components/fragments.html#Transactions

0
katma
Sorumu değiştirdim, lütfen bir göz atın
katma yazar kiduxa, kaynak

You can use FragmentManager for creating a back stack of your fragments. You also have to work with Fragment Transactions first. Further informations see: http://developer.android.com/guide/components/fragments.html#Transactions

0
katma
Sorumu değiştirdim, lütfen bir göz atın
katma yazar kiduxa, kaynak

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

Sanırım, ihtiyacın olan şey bu.

private final static String TAG_FRAGMENT = "TAG_FRAGMENT";

private void showFragment() {
    final Myfragment fragment = new MyFragment();
    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);
    transaction.addToBackStack(null);
    transaction.commit();
}

@Override
public void onBackPressed() {
    final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);

    if (fragment.allowBackPressed()) {//and then you define a method allowBackPressed with the logic to allow back pressed or not
        super.onBackPressed();
    }
}
0
katma
Sorumu değiştirdim, lütfen bir göz atın
katma yazar kiduxa, kaynak

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

Sanırım, ihtiyacın olan şey bu.

private final static String TAG_FRAGMENT = "TAG_FRAGMENT";

private void showFragment() {
    final Myfragment fragment = new MyFragment();
    final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment, fragment, TAG_FRAGMENT);
    transaction.addToBackStack(null);
    transaction.commit();
}

@Override
public void onBackPressed() {
    final Myfragment fragment = (Myfragment) getSupportFragmentManager().findFragmentByTag(TAG_FRAGMENT);

    if (fragment.allowBackPressed()) {//and then you define a method allowBackPressed with the logic to allow back pressed or not
        super.onBackPressed();
    }
}
0
katma
Sorumu değiştirdim, lütfen bir göz atın
katma yazar kiduxa, kaynak