【发布时间】:2013-08-18 04:09:21
【问题描述】:
我知道“newInstance”-模式 (Best practice for instantiating a new Android Fragment)。但是,例如,如果另一个片段更改数据,我该如何更新片段的这些参数?
我知道片段/活动之间的回调方法,但这些回调不会更新参数?!
例如:在创建片段时,我将 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
}
}
所以我有一个简单统一的方式来访问我的论点。并且每次我需要该参数时都不必使用 if-else-hassle。
你怎么看?
【问题讨论】:
-
是的。有多少代码在谈论?一个过度的方法 -
onSaveInstanceState- 在onCreate中有一个额外的行和一个 if-else 语句? -
失败设计缺陷片段不应依赖于其他片段
-
如何“重写”该片段的公共方法中的参数?