これはそれをか 私はこれを変更する必要があり、これを行うための正しい方法はありますしたい非常&ですデザインパターン
少し複雑すぎるようです。私はむしろ、ViewPager
の5つのフラグメントすべてを、メインフラグメントから各サブフラグメントにデータを渡すのを避けるために、保存FAB /ボタンを持つ1つのフォームとして保持したいと思います。ただし、記述する場合には非常に長い形式になり、前のフィールドにフィールドが依存するかどうかが多すぎることがあります。
この設計アプローチが正しい場合は、データをどのように管理する必要がありますか ?各メインFragment
について
、Iは主フラグメントのデータベースからロードされる全体のサブフローのためParcelable
を実装する一つのオブジェクトを使用し、対応するフィールドを埋める時にサブフラグメントに1を渡します。最後のサブフラグメントは、データベースへの更新されたオブジェクトを保存するための責任がある、または単に保存するための主なフラグメントに戻ってそれを渡す
更新:
私はこのコードをテストしたが、ここではしていません私は、サブフラグメントにメインの断片からデータを渡すだろうか一つの方法は次のとおりです。
MainFragment.java
public class MainFragment extends Fragment
{
private MyObj myObj;
private SubFragment currentFragment;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState)
{
final View view = inflater.inflate(R.layout.fragment, parent, false);
final ViewPager pager = (ViewPager) view.findViewById(R.id.pager);
myObj = db.loadObject();
pager.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
return view;
}
public static class MyPagerAdapter extends FragmentPagerAdapter
{
MyPagerAdapter(FragmentManager manager)
{
super(manager);
}
@Override
public Fragment getItem(int position)
{
if(currentFragment != null) myObj = currentFragment.getMyObj();
switch(position)
{
case 4:
currentFragment = FragmentT.getInstance(myObj);
break;
case 3:
currentFragment = FragmentS.getInstance(myObj);
break;
case 2:
currentFragment = FragmentR.getInstance(myObj);
break;
case 1:
currentFragment = FragmentQ.getInstance(myObj);
break;
case 0:
default:
currentFragment = FragmentP.getInstance(myObj);
}
return currentFragmnet;
}
@Override
public int getCount()
{
return 5;
}
@Override
public CharSequence getPageTitle(int position)
{
return titles[position];
}
}
}
SubFragment.java
public class SubFragment extends Fragment
{
protected static final String ARGS = "args";
protected MyObj myObj;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
final Bundle args = getArguments();
if (args != null)
{
myObj = args.getParcelable(ARGS);
}
}
public MyObj getMyObj()
{
return myObj;
}
}
FragmentP.java
public class FragmentP extends SubFragment
{
public static FragmentP getInstance(MyObj myObj)
{
final FragmentP fragment = new FragmentP();
final Bundle args = new Bundle();
args.putParcelable(ARGS, myObj);
fragment.setArguments(args);
return fragment;
}
...
}
3つの主要なフラグメントの違いは何ですか?彼らはちょうど異なるオブジェクトを更新していますか?最終更新データはどこに表示されますか?またはそれを保存して入力フォームを表示し続けますか?また、項目5はあまり明確ではない。フラグメントAには、1-4で説明したシナリオとは異なる特殊なケースがありますか? –
QでQに答えます。3フラグメントは3つの異なるサブフローです。すべては独立していますが、以前のフラグメントから保存されたSQLIteを使用してデータを取得できます。ちょうどデータを収集し、APIとSQLiteに送信する。フラグメントには、次の画面に移動するSWIPE機能のみを持つSAVEボタンおよび1-4と一緒に入力フィールドがほとんどありません。 – VVB