Bundle数据保存与恢复

引言:
在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重新创建时,我们就可以用上面的操作取出数据并进行恢复。

猜你喜欢

转载自blog.csdn.net/tran_sient/article/details/110392696