我目前正在开发一个Android应用程序。由于我想支持平板电脑和手机,我决定使用碎片。但现在出现了一个问题,与其说是一个具体的错误,不如说是一个架构问题。
哪个组件负责加载和保存数据:周围的活动还是碎片本身?android开发人员资源中的所有示例都使用分段加载数据。
我的申请(简化):
但我想我现在被困住了。因此,我的问题更多的是一个关于最佳实践的一般性问题。
发布于 2014-02-10 16:31:01
我建议您只使用片段,而不是用于选项卡和智能手机活动的片段。我这么说的原因是:
我的申请(简化): ItemActivity (显示ItemListFragment) EditItemActivity (显示EditItemFragment) CreateItemActivity (显示EditItemFragment) ItemListFragment (显示来自本地SqliteDb的项目列表) EditItemFragment (允许编辑一项,加载并从SqliteDb中保存)
我想前三个也应该是碎片。其次,您可以使用任何您想使用的数据容器--绑定args,SharedPreferences,甚至父活动中的一些公共字段。
那么,在使用fix片段时,如何从活动传递参数到片段呢?您可以通过静态方法实例化您的片段,如:
private int photoRes;
public static ViewPagerDetailFragment newInstance(int photoRes) {
final ViewPagerDetailFragment f = new ViewPagerDetailFragment();
f.photoRes = photoRes;
return f;
}或者使用捆绑
Bundle args = new Bundle();
args.putInt(KEY,value);
Fragment fragment = new Fragment();
fragment.setArguments(args);至于2-我想它最好先向用户显示用户界面,然后进行数据加载,以其他方式(在onCreate等中加载数据),它可能看起来像ANR。如果数据量较低,则可以将其加载到onCreate或您想要的任何地方。如果数量很大,最好使用加载程序从DB加载数据。
发布于 2014-02-10 16:30:29
片段应该被看作是一种独立的实体,因此在大多数情况下,所有的数据加载/保存都应该由碎片来处理或触发。
将参数传递给片段--要么重写您的代码并在代码中传递args,要么从片段中公开公共方法。
至于访问DB -访问它时,您想要使用的数据。
发布于 2014-02-10 16:35:24
您还可以使用Otto库,并让单例模型成为数据和Fragments订阅者的生产者。
https://stackoverflow.com/questions/21682513
复制相似问题