android - fragment 中的数据处理

标签 android android-fragments fragment

我目前正在开发 Android 应用程序。因为我想支持平板电脑和手机,所以我决定使用 fragment 。但现在出现了一个问题,与其说是具体错误,不如说是架构问题。

哪个组件负责加载和保存数据:周围的 Activity 还是 fragment 本身? android 开发者资源中的所有示例都使用 fragment 中的数据加载。

我的申请(简化版):

  • ItemActivity(显示 ItemListFragment)
  • EditItemActivity(显示 EditItemFragment)
  • CreateItemActivity(显示 EditItemFragment)
  • ItemListFragment(显示来自本地 SqliteDb 的项目列表)
  • EditItemFragment(允许编辑项目,从中加载和保存它 数据库)

但我想我现在被困住了。所以我的问题是关于最佳实践的一般性问题。

  1. 我想在 fragment 中设置参数,但这只在动态添加 fragment 到 Activity 时有效。那么在使用修复 fragment 时如何将参数从 Activity 传递到 fragment ?
  2. 在生命周期中创建 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/

相关文章:

Android 应用程序级范围变量

android - 如何让搜索栏在歌曲播放时自动移动?

android布局 fragment 和普通布局

android - 在 Fragment 中实现 onKeyPreIme(int keyCode, KeyEvent event)

android - Espresso 测试中 RecyclerView 出现 NoSuchMethodError

android - 解析和存储电子书内容,sqlite 索引

java - Android:支持向后兼容

java - android:autoLink ="phone"在 fragment 内不起作用

android - executePendingTransactions 的递归入口( fragment 内没有 fragment )

android - fragment 标题中的 ViewPager 图像