引言:
在ViewPager中嵌套Fragment,里面再进行ViewPager嵌套时,当切换页面导致页面销毁时,数据可能会丢失,导致空指针异常,利用Bundle机制进行数据恢复,就可以有效的解决一些问题。
使用:
在Fragment的onViewCreated方法中可以获得Bundle数据:
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
但是,直接在这里使用类似如下语句获取数据是没有的:
if(savedInstanceState!=null){
channelId=savedInstanceState.getString("channelId");
channelUrl=savedInstanceState.getString("channelUrl");
}
原因是,我们在Fragment销毁之前,没有保存数据。这个保存是通过重写onSaveInstanceState方法实现的:
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
//保存销毁前的数据,用以重建时恢复
if(channelId!=null){
outState.putString("channelId",channelId);
}
if(channelUrl!=null){
outState.putString("channelUrl",channelUrl);
}
}
这样,在下一次Fragment重新创建时,我们就可以用上面的操作取出数据并进行恢复。