2016-06-28 4 views
0

私はViewPagerにFragmentXを持っています。 FragmentXにはEditTextとButtonがあります。ユーザーがボタンを押し、FragmentYをFragmentYに置き換えます。その後、ユーザーは戻るとFragmentXはユーザーからのすべての入力を失いました。ポップバックスタックの後にフラグメントデータを保存して記入してください。

はどのように操作を行い、次のいずれか

FragmentYが

(と返信しないでくださいデータを取得し、FragmentXでのEditTextの中に埋め、その後FragmentYがFragmentXに置き換えられて表示される前に、a)のFragmentX内のデータを保存我々はFragmentYから戻っFragmentXに行くときにそれがあるのでOnSaveInstanceState、断片はこの場合には、それがされていない、破壊されない限り、これは動作しないよう)

b)は何とか

.. FragmentX内のデータを保持します

何か提案がありますか?

+0

ビューページャのフラグメント数? – USKMobility

+0

ビューページ内の3番目のフラグメント – Nickmccomb

+0

try mViewPager.setOffscreenPageLimit(3); fragmentPagerアダプターで – USKMobility

答えて

0

GoogleがあなたのFragmentで宣言されたインターフェースを提供して実装し、バンドルまたはアクティビティに必要なオブジェクトを保存することをお勧めします。次に、newInstace()静的ファクトリメソッドでBundleを渡し、通常どおりにデータを再作成します。あなたはViewPagerを使用しているので、ボタンが押される前に2番目のフラグメントをレンダリングするので(2番目のフラグメントは別のタブにあると仮定します)、それでもインタフェースを介してそれを管理する必要があります。戻るボタンを押すと、データが破棄されない限り、データはそこに残りますが、それでもonSaveInstaceState()を実装する必要があります。 setRetainInstance(boolean retain)を使用することもできます。詳細については、hereを参照してください。

0

addToBackStack()を使用すると、あなたのケースで役立つかもしれません。 バックスタックからフラグメントに戻った場合、フラグメントを再作成せずに同じインスタンスを再利用し、フラグメントライフサイクルでonCreateView()で始まります。Fragment lifecycleを参照してください。

状態を保存する場合は、インスタンス変数を使用し、ではなく、onSaveInstanceState()に依存している必要があります。

チェックこのアウト:Maintaining fragment states

+0

私はaddToBackStack()を使用していますが、バックスタックに追加すると、ユーザーがFragmentに入力したものは保存されないため、フラグメントがバックスタックから呼び出されて表示され、データがなくなるという問題があります。 – Nickmccomb

+0

'getSupportFragmentManager()。beginTransaction()。addToBackStack(" fragment1 ")。replace(R.id.mainFragmentHolder、new YourFragment())。commit();'動作する必要があります。フラグメントを呼び出すコードをplに含めることはできますか?デフォルトの動作を上書きしない場合は、データは残っている必要があります。 –

+0

を再度ご確認ください。その答えは時代遅れです。 ViewPagerが動作する方法のために、私の更新された答えを見てください – Chisko

0

私は今SharedPreferencesにFragmentX内のデータを保存していますし、活動にonBackPressedオーバーライド、およびpopBackStack()が発生したpopFromBackstackと呼ばれる活動で関数を作成しました。

私のFragmentsを置き換える私のアクティビティの関数では、置換前にFragmentXのデータをSharedPrefsに保存しています。私はまた新しいFragmentがFragmentXであれば置換後もチェックしています。もしそうなら、私はSharedPrefsからFragmentXにデータを埋めています。

また、私のアクティビティ(現在のフラグメントがFragmentXの場合)にonBackPressedのデータをFragmentXから保存しています。ユーザが戻るボタンを押したときに入れます。

バックスタティックをポップするためにフラグメントから呼び出すアクティビティで、popBackStack()という静的な静的アクティビティも作成しました。私はまた、ここでFragmentXからデータを保存しています(現在のフラグメントがポップされているのがFragmentXの場合)。破棄されているフラグメントがポップされたら、新しいフラグメントがFragmentXであるかどうかを確認していれば、そのデータを入力します。

長時間のアプローチですが、他の信頼できる方法を見つけることができませんでした。これは完全に機能しています。

関連する問題