2013-08-20 43 views
9

Tôi đã xem xét và tìm thấy một vài câu hỏi có chủ đề tương tự nhưng không có gì hữu ích trong trường hợp của tôi. Tôi đang cố gắng truy cập một đoạn hiện hoạt đang sử dụng getSupportFragmentManager(). FindFragmentByTag (TAG), nhưng nó luôn trả về null. Các câu trả lời trên các câu hỏi tương tự cho rằng phải mất một lúc để commit được thực hiện, do đó, gọi hàm findFragmentByTag sẽ trả về null nếu được gọi quá sớm. Tôi đã thử hai điều:Các mảnh Android - findFragmentByTag luôn trả về null

  • thêm getSupportFragmentManager() executePendingTransactions()
    ngay sau khi cam kết, nhưng vẫn nhận được rỗng..
  • thêm nút ... nhấn nút này sau khi hoạt động đã được tạo, đoạn được đăng ký và chế độ xem được hiển thị nên để hệ thống đủ thời gian để cam kết. Nhưng tôi vẫn nhận được null.

Dưới đây là hoạt động của tôi:

public class MainActivity extends ActionBarActivity { 

private static final String F_SETTINGS = "f_settings"; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.activity_main); 

    Button btn = (Button) findViewById(R.id.btn); 
    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      debug(); 
     } 
    }); 

    if (savedInstanceState == null) { 
     FSettings newFragment = new FSettings(); 
     FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
     ft.replace(R.id.container, newFragment); 
     ft.addToBackStack(F_SETTINGS); 
     ft.commit(); 
     // getSupportFragmentManager().executePendingTransactions(); 
     //// Activating this did not make any difference... 
    } 

    debug(); 
} 

private void debug() { 
    String txt = "null"; 
    Fragment frag = getSupportFragmentManager().findFragmentByTag(F_SETTINGS); 
    if (frag != null) { 
     txt = frag.toString(); 
    } 
    Log.i("Testing", txt); 
} 

}

Tôi đang làm gì sai ở đây? Chúc mừng, Max

+1

bạn có chắc chắn savedInstanceState là null không? – njzk2

+1

ft.addToBackStack (F_SETTINGS); <--- điều này không gắn thẻ mảnh vỡ của bạn. – bofredo

Trả lời

20

Trong mã của bạn, bạn đã không được đề cập trong thẻ thay thế phương pháp Vì vậy,
Sử dụng cấu trúc này thay thế phương pháp của mảnh

ft.replace(R.id.container, newFragment,"fragment_tag_String"); 

Tham khảo link này để biết thêm thông tin. fragment replace with tag name

+0

Oh dear, bạn sẽ không tin rằng bao lâu tôi nhìn chằm chằm vào mã để tìm những gì sai ... cảm ơn, hoạt động ngay bây giờ. – maxdownunder

+0

Vui lòng xem câu hỏi liên quan của tôi: http://stackoverflow.com/questions/24833912/refresh-fragment-ui-from-fragmentactivity –

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