2012-01-27 18 views
11

Tôi có 1 FragmentActivity với ViewPager xử lý 2 đoạn.Android - Xoay màn hình xoay

public class MyFragmentActivity extends FragmentActivity{

private Fragment f1; private Fragment f2; private ViewPager myPager; private MyFragmentAdapter mFragmentsAdapter; private static ArrayAdapter<Fragment> mFragmentArray; public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.my_layout); myViewPager = (ViewPager) findViewById(R.id.pager_acciones); mFragmentArray = new ArrayAdapter<Fragment>(getApplicationContext(),android.R.layout.simple_list_item_1); f1 = new Fragment(); f1 = new Fragment(); mFragmentArray.add(f1); mFragmentArray.add(f2); mFragmentsAdapter = new MyFragmentAdapter(getSupportFragmentManager()); myPager.setAdapter(mFragmentsAdapter); myPartidoPager.setCurrentItem(0); } public static class MyFragmentAdapter extends FragmentPagerAdapter { public AccionesFragmentAdapter(FragmentManager fm) { super(fm); } @Override public int getCount() { return mFragmentArray.getCount(); } @Override public Fragment getItem(int position) { return mFragmentArray.getItem(position); } }

Vấn đề của tôi là mỗi khi thay đổi hướng màn hình, hoạt động này được tạo ra và cũng là mảnh vỡ. Tôi không quan tâm nếu hoạt động được tạo ra một lần nữa, nhưng tôi không muốn các mảnh vỡ được tái tạo.

+0

Tôi đã tìm thấy giải pháp [ở đây] (http://stackoverflow.com/questions/7951730/viewpager-and-fragments-whats-the-right-way-to-store-fragments-state) Cảm ơn bạn @ oneilse14 cho bạn vẫn trả lời. – gutiory

Trả lời

0

Lưu FragmentAdapter của bạn trong onSaveInstanceState và gửi lại cho Hoạt động sau khi thay đổi cấu hình với onRetainNonConfigurationInstance để các đoạn tồn tại thay đổi định hướng.

+0

@ oneilse12. Cảm ơn bạn. Nhưng với một FragmentActivity thì không thể ghi đè lên phương thức onRetainNonConfigurationInstance. – gutiory

13

Cách dễ nhất là để ném một tuyên bố if ngay sau khi phương thức tạo trên được gọi và kiểm tra xem bạn đã có gì trong đó chưa. Nếu savedInstanceState không phải là null, bạn không cần phải làm bất cứ điều gì:

if (savedInstanceState == null){ 
    // do whatever 
} else { 
    // dont do anything 
} 

(câu trả lời này là nhiều hơn cho những người mà vấp ngã khi câu hỏi này bởi vì họ không thể tìm ra lý do tại sao mảnh vỡ được tái bổ sung mỗi khi họ biến thiết bị của họ)

2

Bạn có thể thêm: android:configChanges="screenSize|orientation" Trong AndroidManifest.xml.

Điều này sẽ ngăn Android gọi onCreate khi thay đổi hướng màn hình. Nếu bạn muốn thực hiện xử lý đặc biệt thay đổi hướng, bạn có thể ghi đè onConfigurationChanges.

+8

Không thể tin rằng những câu trả lời này vẫn được đăng ở đây. Tốt hơn là hãy xem điều này: http://cyrilmottier.com/2014/09/25/deep-dive-into-android-state-restoration/ – dumazy