2013-06-23 38 views
5

Tôi đang gặp vấn đề sau trong ứng dụng của mình. Tôi muốn thêm nhiều đoạn vào một LinearLayout dọc theo một thứ tự nhất định.Mutiple fragments in vertical Linearlayout

Dưới đây là cách bố trí của tôi

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/scrollview" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:fillViewport="true" > 
<LinearLayout 
    android:id="@+id/content" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 
</LinearLayout> 
</ScrollView> 

Và đây là đoạn code tôi sử dụng để thêm các mảnh vỡ.

Fragment fragment1 = MyFragment.newInstance(param1); 
Fragment fragment2 = MyFragment.newInstance(param2); 

FragmentManager fm = getSupportFragmentmanager(); 

fm.beginTransaction().add(R.id.content, fragment1, "fragment1").commit(); 
fm.beginTransaction().add(R.id.content, fragment2, "fragment2").commit(); 

Tôi sử dụng một giao dịch mỗi lần để đảm bảo rằng chúng được đặt theo thứ tự trên màn hình.

Vấn đề của tôi là khi định hướng thay đổi và Hoạt động được tạo lại không có cách nào tôi có thể chắc chắn rằng chúng sẽ xuất hiện trên màn hình theo cùng thứ tự.

Có ai đó cũng đã trải nghiệm điều này không? Làm thế nào tôi có thể giải quyết vấn đề? Có hai bố trí bên trong LinearLayout với một id cụ thể cho từng mảnh sẽ không giúp ích được, bởi vì số lượng các đoạn tôi phải thêm chưa được xác định (tôi chỉ sử dụng số 2 cho ví dụ)

+0

lẽ [setRetainInstance] (http: // developer.android.com/reference/android/app/Fragment.html#setRetainInstance (boolean)) sẽ hữu ích cho bạn – zozelfelfo

+0

Bất kỳ cơ hội nào bạn đã giải quyết được sự cố này? Tôi đã tìm kiếm một lúc mà không tìm ra câu trả lời. Tôi chỉ cần tự động thêm số X (có thể thay đổi) các đoạn vào một bố cục tuyến tính khi chạy. –

Trả lời

1

Nếu có số tiền không xác định của Fragments để thêm vào, sử dụng tốt hơn một ViewPager với một FragmentStatePagerAdapter hoặc FragmentPagerAdapter. Ở đó bạn có thể thêm vô số các Mảnh vỡ một cách rõ ràng và không phải lo lắng về một danh sách lớn các Mảnh vỡ bằng cách sử dụng một lượng lớn bộ nhớ.

Nếu bạn muốn ở lại với cách tiếp cận scrollview của bạn, bạn có thể sử dụng FragmentManager.executePendingTransactions() để đảm bảo rằng giao dịch được hoàn thành, trước kia:

FragmentManager fm = getSupportFragmentmanager(); 

fm.beginTransaction().add(R.id.content, fragment1, "fragment1").commit(); 
fm.executePendingTransactions(); 
fm.beginTransaction().add(R.id.content, fragment2, "fragment2").commit(); 
fm.executePendingTransactions(); 
// etc.