2012-04-05 6 views
9

私たちは、ページを追加したり削除したりするための実行時の指示を受け取るViewPagerに基づくAndroidアプリケーションを作成しようとしています。タブ付きブラウザのようなもので、現在のタブを削除したり、特定のタブを削除することができます。ViewPagerとFragmentStatePagerAdapterのページを破棄する

私たちはFragmentStatePagerAdapterを使用しています。これは、リストビューのように多くのページがある場合に使用するためのものです。

しかし、私たちがしよう: - 画面 上にないページを削除する - と同じクラス から新しいフラグメントオブジェクトを作成 - とページの同じ位置に を削除我々はAndroidのことに気づきましたプラットフォームは死んだページを回復し、それをユーザに表示する。私たちが作成した新しいオブジェクトは、単に "onCreate"、 "onCreateView"または "onActivityCreated"を実行しません。

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

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

出典:http://dl.dropbox.com/u/8333012/SimpleAdapter/SimplePager.zip

ビデオ:このプロジェクトからhttp://www.youtube.com/watch?v=-oaXXwU8PSI&hd=1

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

答えて

13

ListViewを扱っていて、アダプタの基礎となるデータを変更するときは、notifyDataSetChanged()を呼び出し、データセットを反映したビューが自動的に更新されます。それはあなたが断片ページャのアダプタも一緒に行かなければならない方法です。

あなたのケースでは、アダプターに通知しません。ただし、FragmentPagerAdapter/FragmentStatePagerAdapterの場合、これらのアダプタは「デフォルトで」notifyDataSetChanged()を無視するため、違いはありません。それは

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

アダプタの実装でgetItemPosition()をオーバーライドして、すでにあなたが追加した後/断片は、(あなたのshowOtherPage()に)呼び出し削除、と述べ動作させるために

mAdapter.notifyDataSetChanged(); 
+1

ありがとうございますが、副作用としてページを変更するパフォーマンスが大幅に低下しました。 Galaxy Tab 10'1(Google I/Oイベント)のページを変更するのに2秒間かかる。あなたの提案の前に、それは瞬間的でした。 –

+0

ありがとう、あなたは私の時間を節約! – ihrupin

関連する問題