2013-07-10 35 views
14

Tôi đã thấy bài này nhưng giải pháp được đăng ở đây không làm việc cho tôi: get the latest fragment in backstackLấy đoạn cuối cùng trong ngăn xếp trở lại

Khi tôi thay thế một đoạn cho một tôi sử dụng:

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

    ft.replace(android.R.id.tabcontent, fragment, tag); 
    ft.addToBackStack(null); 

    ft.commit(); 

Vì vậy, xin lưu ý rằng tôi đang sử dụng thẻ để phát hiện bất kỳ đoạn nào.

Vấn đề của tôi nói riêng như sau:

Giả sử tôi có fragment_A, fragment_B và fragment_C. Tôi có thể nhận được fragment_C từ fragment_A hoặc fragment_B và tùy thuộc vào cha mẹ của cuộc gọi tôi phải làm một cái gì đó cụ thể. Vì vậy, một lần nữa tôi cần phải khôi phục FRAGMENT cuối cùng trong ngăn xếp trở lại.

Khi tôi cố gắng làm:

FragmentManager fm = getSupportFragmentManager(); 

     for(int entry = 0; entry < fm.getBackStackEntryCount(); entry++){ 
      String ide = fm.getBackStackEntryAt(entry).getName(); 
      Log.i("TAG", "Found fragment: " + ide); 
     } 

tôi nhận được null. Nếu tôi sử dụng getId() thay vào đó, tôi nhận được số vì vậy tôi đã cố gắng thực hiện:

int id = fm.getBackStackEntryAt(entry).getId(); 
Fragment fragment = fm.findFragmentById(id); 
Log.i("TAG", "Found fragment: " + fragment.getTag()); 

Nhưng tôi nhận được null .. Tôi không biết những gì khác để làm, vì vậy bất kỳ trợ giúp sẽ được đánh giá cao.

Edit: Tôi gọi phương pháp này trong onBackPressed() {...}

Trả lời

16

Nếu bạn đang sử dụng BackStackEntry.getName(), nó phải là:

ft.replace(android.R.id.tabcontent, fragment, tag); 
ft.addToBackStack(tag); 
+0

bạn nói đúng, đó là những gì tôi đã còn thiếu. Cảm ơn! – kiduxa

+0

thực hành không tốt để sử dụng cùng một thẻ cho đoạn được cho là được thêm hoặc thay thế bằng. và hậu trường thực sự phải là tên của đoạn trước đó để nhớ giao dịch có liên quan đến đoạn đó. –