Activity
は保存ボタン詳細ボタンとViewpager
の4つのフラグメントを含んでいます。 Fragments
には、ユーザーの詳細フォームが含まれています。 ボタンをクリックすると、すべてのフラグメントからデータを取得し、詳細を保存する必要があります。アクティビティで保存ボタンをクリックしたときに、ユーザーが入力した4つのデータすべてを取得する方法は?ビューページのフラグメントからデータを取得
1
A
答えて
1
私は、同じユースケースを持つアプリで作業しました。さらに、私はバックナビゲーションにもデータを保存しなければなりませんでした。問題は少し難しかったですが、私はそれがあったはずです。この問題は、ViewPagerのすべてのフラグメントが必ずしも生きているとは限りません。それらはまだ開始されていないかもしれません、またはユーザーがページングしたときに破棄されるかもしれません。
この問題を解決するために、私はこのblog postからフィードバックを受け取りました。実行している可能性のあるフラグメントだけでなく、フラグメントを許可するために少し修正する必要がありました。
public abstract class BackHandledFragment extends Fragment {
protected BackHandlerInterface backHandlerInterface;
public abstract String getTagText();
public abstract boolean onBackPressed();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if(!(getActivity() instanceof BackHandlerInterface)) {
throw new ClassCastException("Hosting activity must implement BackHandlerInterface");
} else {
backHandlerInterface = (BackHandlerInterface) getActivity();
}
}
@Override
public void onResume() {
super.onResume();
backHandlerInterface.addRunningFragment(this);
}
@Override
public void onPause() {
super.onPause();
backHandlerInterface.removeRunningFragment(this);
}
public interface BackHandlerInterface {
public void addRunningFragment(BackHandledFragment backHandledFragment);
public void removeRunningFragment(BackHandledFragment backHandledFragment);
}
}
活動インターフェースを実装し、活性フラグメントを追跡:
public class EditActivity implements BackHandledFragment.BackHandlerInterface
{
private List<BackHandledFragment> listActiveFragments = new ArrayList<>
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// Notify each active fragment that the back was pressed, this will allow
// them to save any data.
for (BackHandledFragment bf : listActiveFragments) {
bf.onBackPressed();
}
}
@Override
public void addRunningFragment(BackHandledFragment backHandledFragment) {
listActiveFragments.add(backHandledFragment);
}
@Override
public void removeRunningFragment(BackHandledFragment backHandledFragment) {
listActiveFragments.remove(backHandledFragment);
}();
}
各フラグメントはBackHandledFragmentを拡張する必要があり:
public class DetailNetworkFragment extends BackHandledFragment {
@Override
public void onPause() {
super.onPause();
EventBus.getDefault().unregister(this);
saveDataFields();
}
@Override
public void onResume() {
super.onResume();
EventBus.getDefault().register(this);
}
@Override
public String getTagText() {
return TAG;
}
@Override
public boolean onBackPressed() {
saveDataFields();
return false;
}
}
saveDataFields()があまりにも面白くありません。 UIビューからデータをコピーし、アクティビティ内のオブジェクトに戻します。
関連する問題
- 1. フラグメントからビューページにデータを渡す
- 2. ビューページのフラグメントがアクティビティからのイベントを受け取らない
- 3. モデルクラスからフラグメントにデータを取得
- 4. アンドロイドのビューページで前のフラグメントを右から左に取得する方法
- 5. フラグメントからviewPagerフラグメントへのデータを取得
- 6. リストビューリフレッシュ(フラグメントとビューページ内)
- 7. アンドロイド内のナビゲーションドロワーの1つのフラグメントから別のフラグメントにデータを取得
- 8. フラグメントなしのAndroidビューページ
- 9. どのビューページでサイトのURLからIDを取得する
- 10. フラグメントからgetArgumentsデータを取得する方法は?
- 11. FragmentActivityからフラグメントのビューを取得
- 12. ViewPagerからフラグメントを取得する
- 13. ビューページにあるフラグメントからリソースにアクセスできない
- 14. Magentoビューページの製品情報を取得
- 15. ビューページのタブフラグメントと通常のフラグメント
- 16. ビューページ内のフラグメント/タブの置換
- 17. データが古いフラグメントから新しいフラグメントに渡ったときにデータを取得する方法は?
- 18. fragmentStatePagerAdapterのフラグメントは、viewPagerをホストするフラグメントからどのようにデータを取得できますか?
- 19. Rのフラグメント識別子を含むURLからデータを取得するには?
- 20. DialogFragmentの中にあるフラグメントからデータを取得するには?
- 21. バンドルを使用してビューページのフラグメントとアダプタのデータを共有する方法
- 22. フラグメントがビューページ内でスクロールしません
- 23. フラグメントがビューページにロードされない
- 24. ViewPagerから異なるフラグメントから値を取得する
- 25. ビューページのバックスタックからフラグメントを削除し、以前に表示されたフラグメントをリフレッシュする
- 26. 緊急:2つのフラグメントを持つビューページからフラグメントを1つ更新します。
- 27. リアクティブコンテナからデータを取得
- 28. JSONからデータを取得
- 29. サーバからデータを取得
- 30. プレイスカサーバからデータを取得