2013-05-15 28 views
11

Tôi có một đầu dò và tôi không thể tìm thấy giải pháp ở bất cứ đâu.addToBackStack không hoạt động, đóng hoạt động thay vì popping back fragments

Ứng dụng của tôi không quay lại đoạn trước đó khi tôi nhấn nút quay lại, thay vào đó đóng hoạt động.

Tôi có hoạt động hiển thị 4 đoạn: [1], [2], [3], [4]. Tôi có thể chuyển đổi giữa 3 đoạn đầu tiên với thanh tác vụ, tôi không muốn thêm chúng vào ngăn xếp lại.

Phân đoạn [4] là chế độ xem chi tiết của một mục được chọn trong đoạn [3]. Khi tôi nhấn trở lại [4] tôi muốn quay trở lại mảnh vỡ [3], không đóng ứng dụng.

Các hiệu ứng chuyển tiếp được thực hiện theo cách này bởi hoạt động, trong đó các mảnh được đặt:

private void replaceFragment(Fragment fragment, boolean toBackStack){ 

    if(fragment != null){ 

     FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.container, fragment); 

     if(toBackStack) 
      fragmentTransaction.addToBackStack(null); 

     fragmentTransaction.commit(); 
    } 
} 

nơi toBackStack phải lúc nào cũng sai trừ khi quá trình chuyển đổi từ [3] [4].

Nếu tôi chuyển đếnBackStack đúng trong mọi chuyển tiếp, hoạt động sẽ đóng lại.

Trả lời

17

Tôi gặp vấn đề tương tự. Cụ thể, tôi đang thực hiện một PreferenceFragment và tôi muốn nút quay lại trả về cho tôi bất kỳ phân đoạn đã tải trước nào.

Có vẻ như "ngăn xếp lưng" là thứ không được kích hoạt tự động với nút quay số hệ thống. Giải pháp của tôi là tự bật stack trở lại từ onBackPressed override:

@Override 
public void onBackPressed() 
{ 
    if (inSettings) 
    { 
     backFromSettingsFragment(); 
     return; 
    } 
    super.onBackPressed(); 
} 

Bất cứ khi nào tôi tìm đến sở thích đoạn của tôi, tôi đặt inSettings boolean true trong hoạt động để duy trì trạng thái đó. Đây là những gì backFromSettingsFragment phương pháp của tôi trông giống như:

private void backFromSettingsFragment() 
{ 
    inSettings = false; 
    getFragmentManager().popBackStack(); 
} 

Vì vậy, nếu bạn có thể theo dõi tình trạng khi bạn đang ở trong Fragment [4] và ngăn chặn các nút quay lại, bạn sẽ có thể tự gọi

getFragmentManager().popBackStack(); 

để quay lại Phân đoạn [3].

Lưu ý: hãy nhớ rằng bạn cần phải thêm Phân đoạn [3] vào ngăn xếp lại, không Phân đoạn [4]. (Trừ khi [4] chuyển đến [5] và bạn cũng cần quay lại [4].)

+3

Vì vậy, thay vì giữ trạng thái trong Hoạt động, có thể tốt hơn để thực hiện điều này trong onBackPressed() if (getFragmentManager)() .getBackStackEntryCount()> 0) getFragmentManager(). popBackStack(); – toidiu

Các vấn đề liên quan