我目前正在处理我的应用程序的模块1&设置它的设计我也想申请其他模块。
我在模块1中有以下元素
我的问题是,
这似乎非常&想要这是正确的方法吗?还是我应该改变这种设计模式?而且,如果这种设计方法是正确的,那么我应该如何管理数据传递?
答案 0 :(得分:0)
请记住,您将有不同的方法来做到这一点,没有一个是正确的只是更容易或更清洁。 所以,如果我是你,我会尝试分离域对象,并有一个数据模型和仅处理视图部分的视图。 对我来说,最好的方法是遵循MVVM模式,它可以为您提供很多控制,您可以在Google android数据库库文档中阅读它。
另一种方法是攻击它,比方说,有一个所有视图都可以访问的Singleton WorkFlowManager,并且包含所有数据和业务逻辑。 这样,Any Fragment / Activity可以检查是否设置了所有表单字段,并使“保存”按钮可见(例如)。 如果要使用事件更新视图,可以在Manager上创建自定义eventListener,并在填充完最后一个字段后立即触发FormFilledEvent(或类似)并让Fragment注册该事件以监听它,并制作Buttton可见。
这是一个用例,但您可以有多个
快乐的编码;)
答案 1 :(得分:0)
这似乎非常&想要这是正确的方法吗? 我应该改变这种设计模式
对我来说,这似乎有点过于复杂。我宁愿将ViewPager
的所有5个片段保存为一个带有保存FAB /按钮的表单,以避免将数据从主片段传递到每个子片段。但是,在您描述的情况下,这可能导致非常长的形式,或者如果字段依赖于先前的形式,则可能导致太多的检查。
如果这种设计方法是正确的那么我应该如何管理数据 传递?
对于每个主Fragment
,我将使用一个实现Parcelable
的对象来处理从主片段上的数据库加载的整个子流,然后将其传递给子片段时间填写相应的字段。最后一个子片段负责将更新的对象保存到数据库,或者只是将其传递回主片段以进行保存
我还没有测试过这段代码,但是这是我将数据从主片段传递到子片段的一种方式:
<强> 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;
}
...
}
答案 2 :(得分:0)
这可以使用Observer设计模式来解决。使模型可观察并将所有ui组件注册为观察者更新。我建议RXjava来解决这个问题。