13

Tôi mới sử dụng Android và tôi đang gặp sự cố sau. Tôi đang phát triển cho cả hai, Android 2 và 3, và đây là lý do tại sao tôi sử dụng các mảnh vỡ. Tuy nhiên, để làm cho ứng dụng hoạt động trên các thiết bị Android 2, tôi nhập android.support.v4.app.ListFragment. Tôi cần phải duy trì lựa chọn trong ListFragment của tôi khi định hướng của màn hình thay đổi. Tôi đang ghi đè phương thức onSaveInstanceState() và đặt một gói vào gói. Khi màn hình được xoay, phương thức này được gọi và int được thêm vào gói. Tuy nhiên, khi gọi là onActivityCreated(), gói của nó là rỗng. Tôi đang làm theo ví dụ được cung cấp trên trang web Android: http://developer.android.com/reference/android/app/Fragment.html, nhưng như đã đề cập ở trên - sau khi onSaveInstanceState() được gọi, gói trong onActivityCreated() vẫn không có giá trị.Android ListFragment không lưu gói trong onSaveInstanceState()/không truy xuất gói trong onActivityCreated()

Dưới đây là các mã:

import android.support.v4.app.ListFragment; 
public class VisitsHomeFragment extends ListFragment { 
    private int selectedPosition = -1; 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     if (savedInstanceState != null) { 
      if (savedInstanceState.containsKey("SELECTED_POSITION")) { 
       selectedPosition = savedInstanceState.getInt("SELECTED_POSITION"); 
      } 
     } 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putInt("SELECTED_POSITION", selectedPosition); 
    } 
} 

tôi sẽ đánh giá cao bất kỳ giúp đỡ về vấn đề này.

+0

onRestoreInstanceState() không khả dụng cho các đoạn. – Maria

+0

Chỉ đề xuất của tôi là gỡ lỗi các nguồn compat để xem bạn có thể xử lý những gì đang diễn ra hay không. – PJL

+0

Tôi đã chơi với dự án mẫu (HoneycombGallery), thêm Thư viện tương thích vào nó và mọi thứ hoạt động tốt ... Trong ứng dụng của tôi - nó không. Giải pháp tạm thời cho tôi là thêm 'android: configChanges =" orientation "' vào tệp kê khai, nhưng nó không giải quyết được bí ẩn của gói bị mất (thực sự nghĩ đến việc viết một cuốn sách có tựa đề "Bí ẩn của gói bị mất") ;-)). – Maria

Trả lời

2

Tôi có cùng sự cố và cuối cùng tôi đã theo dõi nó xuống để có các giá trị thuộc tính android: id khác nhau trên các phần tử phân đoạn trong hai bố cục khác nhau (dọc và ngang).

+0

Xin chào, cảm ơn bạn đã trả lời. Unfortunatelly nó không phải là cùng một vấn đề trong trường hợp của tôi. – Maria

7

Tôi gặp sự cố tương tự, thêm android:id vào phần tử phân đoạn trong tệp bố cục đã khắc phục sự cố này.

Có vẻ như FragmentManager sử dụng id để gửi gói thích hợp khi tạo lại một đoạn.

+0

Tôi gặp vấn đề tương tự như Maria và tôi đã xác định 'android: id' cho phần tử' fragment' trong tệp bố cục của mình. Đây có thể là lỗi thư viện tương thích. –

+0

Đối với tôi vấn đề là ở android: id cảm ơn bạn – endryha

3

Đảm bảo bạn không gọi số setRetainInstance(true) trong số Fragment. Sau một thử nghiệm nhỏ, tôi xác định điều này như là lỗi trong mã của tôi. Nhược điểm của việc phải làm theo cách này là người ta phải bó tất cả dữ liệu cá thể theo cách thủ công.

Sau khi xóa cuộc gọi phương thức và cập nhật onSaveInstanceState để gửi tất cả các biến mẫu của tôi, giờ đây tôi có thể khôi phục vị trí danh sách khi xoay vòng.

+0

Nếu bạn setRetainInstance (true) thì bạn không cần một gói nào cả ... Đối tượng Fragment không bao giờ bị hủy và tất cả biến của nó vẫn giữ nguyên. – Monstieur