我目前正在开发 Android 应用程序。因为我想支持平板电脑和手机,所以我决定使用 fragment 。但现在出现了一个问题,与其说是具体错误,不如说是架构问题。
哪个组件负责加载和保存数据:周围的 Activity 还是 fragment 本身? android 开发者资源中的所有示例都使用 fragment 中的数据加载。
我的申请(简化版):
- ItemActivity(显示 ItemListFragment)
- EditItemActivity(显示 EditItemFragment)
- CreateItemActivity(显示 EditItemFragment)
- ItemListFragment(显示来自本地 SqliteDb 的项目列表)
- EditItemFragment(允许编辑项目,从中加载和保存它 数据库)
但我想我现在被困住了。所以我的问题是关于最佳实践的一般性问题。
- 我想在 fragment 中设置参数,但这只在动态添加 fragment 到 Activity 时有效。那么在使用修复 fragment 时如何将参数从 Activity 传递到 fragment ?
- 在生命周期中创建 Activity 时,我可以访问我的数据库。但是我必须决定是否应该在生命周期之前加载数据。 onCreate 和 onCreateView 以及 savedInstanceState 决定我是应该从包中恢复还是稍后从数据库加载。那么我应该在 onCreate 中存储是否从数据库加载或者是否有更好的方法?
最佳答案
FOA 我建议您只使用 fragment 而不是智能手机的选项卡和 Activity fragment 。我之所以这样说:
My application (simplified):
ItemActivity (shows ItemListFragment)
EditItemActivity (shows EditItemFragment)
CreateItemActivity (shows EditItemFragment)
ItemListFragment (shows a list of items from local SqliteDb)
EditItemFragment (allows to edit an item, loads and saves it from SqliteDb)
我想前三个也必须是 fragment 。其次,您可以使用任何您想要的数据容器 - Bundle with args、SharedPreferences 甚至父 Activity 中的一些公共(public)字段。
那么在使用修复 fragment 时如何将参数从 Activity 传递到 fragment ?
您可以通过静态方法实例化您的 fragment ,例如:
private int photoRes;
public static ViewPagerDetailFragment newInstance(int photoRes) {
final ViewPagerDetailFragment f = new ViewPagerDetailFragment();
f.photoRes = photoRes;
return f;
}
或者使用 Bundle
Bundle args = new Bundle();
args.putInt(KEY,value);
Fragment fragment = new Fragment();
fragment.setArguments(args);
至于 2 - 我想最好先向用户显示 UI 然后再加载数据,以其他方式(在 onCreate 中加载数据等)它可能看起来像 ANR。如果数据量很低,那么它可以加载到 onCreate 或任何你想要的地方。如果数量很大,最好使用加载器从数据库加载数据
关于android - fragment 中的数据处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21682513/