9

実行時にページを追加および削除するための指示を受け取るViewPagerに基づくAndroidアプリケーションを作成しようとしています。タブ付きのブラウザエクスペリエンスとほぼ同じように、現在のタブを削除したり、特定のタブを削除したりできます。

Googleのドキュメントに従って、FragmentStatePagerAdapterを使用します。これは、ページ数が多い状況で使用することを目的としており、リストビューのように機能します。

しかし、次のことを試みた場合:-画面上にないページを削除します-同じクラスから新しいフラグメントオブジェクトを作成します-削除されたページの同じ位置にAndroidプラットフォームがデッドページを回復し、それを表示することに気づきましたユーザーに。作成したばかりの新しいオブジェクトは、「onCreate」、「onCreateView」、または「onActivityCreated」を実行しません。

この問題を修正して、プラットフォームに同じクラスの新しいフラグメントオブジェクトを使用させる方法を探しています。何か案は?

現在のページを破棄すると、プラットフォームが実際にページを破棄し、同じクラスから新しいオブジェクトを作成したことがわかりました。これは、問題とこの動作を再現した小さな例です。

ソース:http ://dl.dropbox.com/u/8333012/SimpleAdapter/SimplePager.zip

ビデオ:http ://www.youtube.com/watch?v = -oaXXwU8PSI&hd = 1

このプロジェクトから、最初のページのTextViewをタッチすると、2番目のページ(緑色)が新しい青色のページに削除されるように設計されています。最初のページからそれを行っても、2番目のページは緑色のままであることがわかります。ただし、2番目のページ(緑色)のAndroidに戻るボタンを押して、TextViewをタッチすると、作成された2番目のページは正しい青色になります。

4

1 に答える 1

13

ListViewを処理していて、呼び出すアダプターの基になるデータを変更するとnotifyDataSetChanged()、データセットを反映するビューが自動的に更新されます。これは、フラグメントページャーアダプターを使用する場合の方法でもあります。

あなたの場合、あなたはアダプターに通知しません。ただし、FragmentPagerAdapter/の場合、これらのアダプタは「デフォルト」をFragmentStatePagerAdapter無視するため、違いはありません。それを機能させるには、アダプターの実装でをnotifyDataSetChanged()オーバーライドしますgetItemPosition()

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}

そして、すでに述べたように、フラグメントを追加/削除した後、(のshowOtherPage())を呼び出します

mAdapter.notifyDataSetChanged();
于 2012-04-06T01:11:44.810 に答える