更新片段参数的最佳实践?

Man*_*iac 31 android android-fragments

我知道"newInstance"-Pattern(实例化新Android片段的最佳实践).但是,如果另一个片段更改数据,如何更新片段的这些参数?

我知道片段/活动之间的回调方法,但这些回调不会更新参数?!

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

解决这个问题的最佳做法是什么?我是否必须手动将其存储在savedInstanceState中,并在使用时决定是使用instanceState还是arguments-bundle?

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

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
  }
}
Run Code Online (Sandbox Code Playgroud)

所以我有一个简单统一的方式来访问我的论点.每次我需要这个论点时,不必使用if-else-hassle.

你怎么看待这件事?

M-W*_*eEh 21

一旦设置并Fragment添加参数,您就无法更改参数Activity,我使用了您自己定义的类似方法.

首先,我检查了Bundle传递给onCreate(),如果它不是null我使用它,但如果它为null然后我使用参数.我保存了最新的数据onSaveInstanceState().

有关更多详细信息:是否可以在将片段添加到活动后将其传递给片段?

  • 我强烈建议OP将此作为给予适当信用的答案. (2认同)

小智 6

我只是更改捆绑包中的值。

例子:

synchronized (fragment.getArguments()) {
    fragment.getArguments().putInt(KEY, new Value);
}
Run Code Online (Sandbox Code Playgroud)

并使用新参数更新内容