2012-02-01 35 views
7

Cách xóa đoạn hiện tại và hiển thị đoạn trước? Giống như nếu tôi bấm nút "Back"Hiển thị đoạn trước

Tôi đang sử dụng xây dựng như:

FragmentManager fm=getFragmentManager(); 
FragmentTransaction ft=fm.beginTransaction(); 
ft.remove(fragment).commit(); 

Nhưng nó chỉ loại bỏ đoạn hiện nay, mà không hiển thị trước

Trả lời

13

Bạn phải gọi FragmentTransaction.addToBackStack(null) nơi bạn thêm đoạn và sau đó gọi FragmentManager.popBackStack() khi bạn muốn xóa nó.

+2

Và nếu bạn làm điều này, bạn sẽ không phải ghi đè hành vi nút BACK. Các mảnh nhìn thấy được sẽ tự động được loại bỏ và đoạn tiếp theo trong backstack sẽ được hiển thị tự động khi bạn nhấn BACK. –

+0

Điều này không hoạt động đối với tôi, tôi đang sử dụng thư viện v4. –

+0

FragmentManager.popBackStack() tải lại đoạn. –

4

Thêm phương pháp này trong hoạt động của bạn:

@Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
     if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
      if(this.getFragmentManager().getBackStackEntryCount() != 0){ 
       this.getFragmentManager().popBackStack(); 
       return true; 
      } 
      // If there are no fragments on stack perform the original back button event 
     } 

     return super.onKeyDown(keyCode, event); 
    } 

Sau đó, nơi bạn đang thay đổi các mảnh vỡ làm điều này:

FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
transaction.replace(android.R.id.content, new YourFragmentName()); 
transaction.addToBackStack(null); // this is needed for the above code to work 
transaction.commit(); 
0

Cố gắng để hiển thị đoạn trước đó sau khi remove:

FragmentManager fm=getSupportFragmentManager(); 
    FragmentTransaction ft=fm.beginTransaction(); 
    ft.remove(fragment).commit(); 

    previousFragment=(SherlockFragment)getSupportFragmentManager() 
    .findFragmentByTag(""+currentTagNum); 
    getSupportFragmentManager().beginTransaction() 
      .show(mFragment) 
      .commit(); 
Các vấn đề liên quan