2

WebViews を持つ ViewPager のフラグメントがあります。電話を回転させると、ViewPager に最初のページが表示されます。これは、アクティビティとフラグメントが再度作成されるためです。ViewPager の状態を保存するにはどうすればよいですか。次のコードは機能しません

@Override
public void onActivityCreated(Bundle savedInstanceState) 
    {
        super.onActivityCreated(savedInstanceState);
        if (savedInstanceState != null) 
        {
            // Restore last state for checked position.
            int pos  = savedInstanceState.getInt("currentPosition");
            this.setSelectedItem(pos);
        }
    }

    @Override
    public void onSaveInstanceState(Bundle outState) 
    {
        super.onSaveInstanceState(outState);
        outState.putInt("currentPosition", positionOfSelectedIndex);
    }
4

2 に答える 2

4

フラグメントのコンストラクターに次のように記述します。

setRetainInstance(true);

複数のコンストラクターがある場合は、これがデフォルトの引数なしコンストラクターにあることを確認してから、他の各コンストラクターが呼び出すことを確認する必要があります

this();

次に、PageAdapter をインスタンス化する FragmentActivity に次の行を追加します。

myPager = (ViewPager)findViewById(R.id.pager);
myAdapter = new MyPagerAdapter(anyParamsYouMightHave);
myPager.setAdapter(myAdapter);
myPageAdpater.setCurrentItem(indexOfSomePointYouWishToReturnTo);

マーク

于 2012-02-22T09:22:49.480 に答える
1

FragmentActivity(ホストアクティビティ)を作成する方法がすべてです。ビューページャーの状態を保存することはできないようですが、ビューページャーのアダプターにプッシュしたフラグメントの状態を保存することはできます。また、フラグメント内にいくつかのデータを保存することもできます(同じ方法)。また、アダプタがビューを自動的に破棄したくない場合(viewpagerをスワイプした場合)、アダプタのdestroyメソッドをスーパーなしでオーバーライドします。コードと簡単な解決策で私の質問を参照してください:ViewPagerとフラグメント—フラグメントの状態を保存する正しい方法は何ですか?

于 2011-10-31T13:01:03.440 に答える