【问题标题】:onSaveInstanceState in Fragment not working?片段中的 onSaveInstanceState 不起作用?
【发布时间】:2016-04-11 19:51:49
【问题描述】:

我需要帮助。我不知道这里出了什么问题。需要片段中保存的实例数据,但它对我不起作用?任何人都可以帮忙吗?这是我的代码:

 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main, container, false);

        if (savedInstanceState == null) {
            Log.e(getActivity().getClass().getSimpleName(),"DATA is NULL");
        }else{
            Log.e(getActivity().getClass().getSimpleName(),"DATA IS NOT NULL " + savedInstanceState.getString(Constans.SAMPLEDATA));
        }


@Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putParcelable(Constans.MOVIE, movie);
        outState.putString(Constans.SAMPLEDATA, "sampleData");
    }

【问题讨论】:

  • 你在处理他 Fragment 的 Activity 中调用super.onSaveInstanceState() 吗?
  • 你怎么知道它不起作用?

标签: android screen-rotation savestate


【解决方案1】:

发生这种情况是因为在屏幕旋转时重新创建了您的活动,因此它内部的片段是否再次从初始位置开始,因为它在活动首次启动时开始

您需要在活动的 onCreate 中添加它,并在 if 语句中设置片段,如本例所示

if (savedInstanceState == null){

        launchfragment

    } else {

        // do nothing
    }

希望对你有帮助

【讨论】:

  • 与所述问题无关
【解决方案2】:

添加 super.onSaveInstanceState(outState);

@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putParcelable(Constans.MOVIE, movie);
    outState.putString(Constans.SAMPLEDATA, "sampleData");
    super.onSaveInstanceState(outState);
}

【讨论】:

  • 为什么会有两个超级调用?
  • 它对我不起作用。我写了这个但什么也没发生。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 2012-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-06
相关资源
最近更新 更多