2014-05-12 19 views
14

Tôi có một Activity như mã bên dưới:Android onBackStackChanged() không được gọi

public class AuthenticatedMainActivity extends Activity implements FragmentManager.OnBackStackChangedListener{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     ............. 
     FragmentManager fragmentManager = getFragmentManager();   
     fragmentManager.beginTransaction().add(R.id.frame_container,fragment, "First").addToBackStack(null).commit(); 
    } 

    private void switchFragment(Fragment fragment){    
     FragmentManager fragmentManager = getFragmentManager(); 
     fragmentManager.beginTransaction() 
     .replace(R.id.frame_container, fragment).addToBackStack("Tag").commit(); 
    } 

    @Override 
public void onBackStackChanged() { 
    System.out.println("====================================================changeeeeeeeeeeeeeeeeeeeeeeeeee"); 
}  
} 

Nhưng phương pháp onBackStackChanged() không bao giờ được gọi là thậm chí Sau khi thay thế thành công mảnh với phương pháp switchFragment.

Trả lời

25

Bạn cần thêm Activity làm OnBackStackChangedListener sử dụng addOnBackStackChangedListener.

Ví dụ:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ............. 
    FragmentManager fragmentManager = getFragmentManager();  
    fragmentManager.addOnBackStackChangedListener(this);  
    fragmentManager.beginTransaction().add(R.id.frame_container,fragment, "First").addToBackStack(null).commit(); 
} 
+3

Hóa ra bạn phải dứt khoát gọi: .addToBackStack (null) khác onBackStackChanged không được gọi một cách chính xác ngay cả khi đã đăng ký! –

+0

@ BenMartenThat vì các giao dịch phân đoạn không được thêm vào backstack theo mặc định. –

-1

điều duy nhất cần thiết là phải làm onCreate này:

getFragmentManager().addOnBackStackChangedListener(this); 
Các vấn đề liên quan