我知道“newInstance”模式(最佳实践:实例化Android Fragment)。但是,如果另一个片段更改了数据,我该如何更新片段的这些参数呢?
我知道在Fragment/Activity之间使用回调方法,但这些回调不会更新参数?!
例如:在创建片段时,我使用bundle将URI传递给它。然后,另一个Fragment通过第一个Fragment上的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麻烦。
你觉得怎么样?
onSaveInstanceState
- 有1行额外的代码和一个if-else语句在onCreate
中吗? - gunar