6

Tôi có một hoạt động đơn giản trong đó nó được lưu trữ một Ngăn Điều hướng. Một trong những mục nhập của nó là một WebView, mà phải mất rất nhiều để tải (nó hiển thị Gmail, để sau tất cả những chuyển hướng khó chịu mất khá nhiều).Làm thế nào để ngăn chặn sự giải trí mảnh khi được chọn từ NavigationDrawer?

Tôi muốn giữ lại đoạn ngay cả khi các lựa chọn khác nhau xảy ra. Tôi nghĩ rằng những giải pháp này có thể hoạt động. Họ không.

1) Không được tái tạo đoạn: ngay cả khi mWebmailFragment thựckhông null, onCreateView() được gọi trong mọi trường hợp.

private Fragment mWebmailFragment /*, the others */; 

public void selectItem(int position) { 
    Fragment fragment = null; 
    switch (position) { 
     case FRAGMENT_CODE_WEBMAIL: 
      mWebmailFragment = mWebmailFragment!=null ? mWebmailFragment : new WebmailFragment(); 
      fragment = mWebmailFragment; 
      break; 
    // ... 
} 

2) nếu onCreateView() được gọi, trạng thái đối tượng WebView giữ lại có thể hoạt động. Vâng, nó không: gỡ lỗi Tôi phát hiện ra rằng savedInstanceState là luôn luôn null. Tôi không biết tại sao.

public View onCreateView(LayoutInflater inflater, ViewGroup container, 
     Bundle savedInstanceState) { 
    super.onCreateView(inflater, container, savedInstanceState); 

    // Retain instance 
    setRetainInstance(true); 

    //.... 

    // SavedState 
    if (savedInstanceState != null) { 
      mWebView.restoreState(savedInstanceState); 
    } else { 
     // do stuff 
    } 
} 
@Override 
public void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
    mWebView.saveState(outState); 
} 
+0

Làm cách nào để thay đổi phân đoạn khi bạn chọn một phân đoạn khác? nếu bạn "thay thế" chúng, có thể thử "show()" và "hide()" thay thế. – Maximosaic

+0

bạn đã bao giờ tìm thấy một giải pháp cho điều này? –

+0

Không ... Tôi đã sử dụng "ẩn tất cả - hiển thị lựa chọn" logic, nhưng vẫn còn khi một sự thay đổi định hướng xảy ra tất cả mọi thứ messes lên. Hiện tại, tôi đã giải quyết việc buộc giao diện người dùng ở chế độ dọc, nhưng bạn có thể hiểu giới hạn của nó là bao nhiêu. – Gianluca

Trả lời

0

Tôi nghĩ bạn chưa sử dụng ẩn/Hiển thị đúng cách. Trong giao tác phân đoạn của bạn, sử dụng add() để tải mảnh thay vì thay thế().

Thay đổi này

final FragmentManager myFragmentManger = myContext 
        .getSupportFragmentManager(); 
      final FragmentTransaction myFragmentTransaction = myFragmentManger 
        .beginTransaction(); 
      myFragmentTransaction.replace(R.id.content, aFragment, 
        aFragmentTag.getFragment()); 

để

final FragmentManager myFragmentManger = myContext 
        .getSupportFragmentManager(); 
      final FragmentTransaction myFragmentTransaction = myFragmentManger 
        .beginTransaction(); 
      myFragmentTransaction.add(R.id.content, aFragment, 
        aFragmentTag.getFragment()); 

Nếu bạn sử dụng thay thế, createView() của đoạn sẽ được gọi mọi lúc. Hãy thử sử dụng mã add() như trên.

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