android - 更新 fragment 参数的最佳实践?

标签 android android-fragments

我知道“newInstance”模式(Best practice for instantiating a new Android Fragment)。但是,例如,如果另一个 fragment 更改数据,我该如何更新 fragment 的这些参数?

我知道 fragment/Activity 之间的回调方法,但这些回调不会更新参数?!

例如:在创建 fragment 时,我将 URI 与 bundle 一起传递给它。 然后另一个 fragment 通过第一个 fragment 上的 changeUri(Uri uri) 方法回调更改此 URI。 如果 fragment 被重新创建(例如由于屏幕旋转),它将使用参数包中的第一个 URI 而不是后来更新的 uri,对吗?

解决此问题的最佳做法是什么?我是否必须手动将其存储在 savedInstanceState 中并根据使用情况决定是使用 instanceState 还是 arguments-bundle?

我正在寻找一种处理 fragment 参数的标准方法,所以我想我会采用这种方法(伪代码):

private Uri arg1;

public static Fragment newInstance(Uri arg1) {
  create bundle
  create fragment instance
  set bundle to fragment
  return fragment
}

private void onCreate(Bundle savedInstance) {
  if(savedInstance != null) {
    arg1 = savedInstance.uri
  }
}

private Uri getUri() {
  if(arg1 == null) {
    arg1 = getArguments.uri
  }
  if(arg1 == null) {
    arg1 = defaultValue
  }
}

所以我有一个简单统一的方式来访问我的论点。并且每次我需要该参数时都不必使用 if-else-hassle。

你怎么看?

最佳答案

一旦将其集合和 Fragment 添加到 Activity 后,您将无法更改参数,我使用了您自己定义的类似方法。

首先,我检查了传递给 onCreate()Bundle,如果它不为 null,我使用它,但如果它为 null,那么我使用参数。我将最新数据保存在 onSaveInstanceState() 中。

更多详情:Is it possible to pass arguments to a fragment after it's been added to an activity?

关于android - 更新 fragment 参数的最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18261677/

相关文章:

java - Activity 和 Fragment 之间的通信

布局编辑后 Android RecyclerView 滚动不起作用

java - setOnClickListener 仅在平板电脑(10 英寸)上出现错误?

JavaScript:本地存储更改时如何重新加载页面?

java - 使用自定义字体在 Canvas 上绘图 Java Android

android - kSOAP2 输出/org.xmlpull.v1.xmlpullparserException 预期 start_tag

android - fragment 是否可以扩展 fragment ?

android - 我怎样才能让我的后退按钮像设备后退按钮 android 一样工作

java - 从另一个项目中的 AsyncTask 的 onPostExecute() 更新 UI 小部件

android - 处理 fragment 和查看寻呼机 : can't change tag of fragment AND Recursive entry to executePendingTransactions