5

私はActionBarSherlockを使用しています(これは基本的にAndroidサポートパッケージの拡張です)。

私がやろうとしていることは次のとおりです。

FragmentActivity単一の をホストする がありますViewPager。これViewPagerFragmentStatePagerAdapter(今後もいろいろ出てくるので)あります。しかし、今のところ、テスト用に 2 つのアイテムがロードされているだけです。

私が縦向きになっている間、すべてがうまく機能しています。しかし、横向きに変更すると、アダプターの最初のアイテムに戻ります (すべてがリロードされるため、これで問題ありません) が、次のアイテムにスワイプできません。何も起こらないだけです。

Loaderデバッグから、2 つのアイテムが正常に返されることがわかります。getItem(...)position0 と 1 で呼び出されます。したがって、そうでないことを除いて、基本的にすべてが正常に見えます ;)

ところで:横向きから始めて縦向きに切り替えると、同じことが逆に起こります。

ここで何が間違っているのでしょうか?

これが私のコードの一部です:

public class QuotesStatePagerAdapter extends FragmentStatePagerAdapter {

private List<Quote> mQuotes;

public QuotesStatePagerAdapter(FragmentManager fm, List<Quote> quotes) {
    super(fm);
    mQuotes = quotes;
}

@Override
public Fragment getItem(int position) {
    Bundle arguments = new Bundle();
    arguments.putSerializable("quote", mQuotes.get(position));
    QuoteFragment fragment = new QuoteFragment();
    fragment.setArguments(arguments);
    return fragment;
}

@Override
public int getCount() {
    return mQuotes.size();
}

}

public QuotesFragment() {
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

public void updateOrdering(ORDERING newOrdering) {
    mOrdering = newOrdering;
    getLoaderManager().getLoader(0).startLoading();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    return inflater.inflate(R.layout.quotes, container, false);
}

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mViewPager = (ViewPager) view.findViewById(R.id.viewpager);
    mViewPager.setOnPageChangeListener(this);
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    getLoaderManager().initLoader(0, null, this);
}

@Override
public Loader<List<Quote>> onCreateLoader(int id, Bundle args) {
    return new QuotesLoader(getActivity(), mCategoryId);
}

@Override
public void onLoadFinished(Loader<List<Quote>> loader, List<Quote> data) {
    mQuotes = data;
    mViewPager.setAdapter(new QuotesStatePagerAdapter(
            getSupportFragmentManager(), mQuotes));
}
4

2 に答える 2

12

android:configChanges="orientation" は魅力のように機能しましたが、Android チームによって推奨されていないことがわかりました (最後のケースのリソースのみ)... ここを参照してくださいhttp://developer.android.com/guide/topics/manifest/activity -element.html#config

次のように置くことがわかりました: setRetainInstance(true); インスタンスを保持した各フラグメントの onCreateView で、トリックを行います。(onActivityCreated が再度呼び出されることに注意してください)

于 2012-02-23T14:49:19.160 に答える
-2

android:configChanges="orientation"Activity タグ内のマニフェストに追加してみてください

于 2012-02-18T14:09:40.363 に答える