【问题标题】:Can not display data in fragment even if savedInstanceState is not null即使 savedInstanceState 不为空,也无法在片段中显示数据
【发布时间】:2017-02-14 23:20:38
【问题描述】:

我想在屏幕方向改变后保存和恢复片段中的数据。

为此,我使用“onSaveInstanceState”方法来保存我的数据。

@Override
public void onSaveInstanceState(Bundle outState) {
    outState.putString("date", dateTextView.getText().toString());
    outState.putString("time", timeTextView.getText().toString());
    outState.putString("hour", hour);
    outState.putString("minute", minute);
    outState.putString("topicGroup", currentTopicGroup);
    outState.putString("topic", currentTopicTitle);
    outState.putString("level",currentLevelName);
    outState.putDouble("totalPrice", totalPrice);
    outState.putString("activityTitle", getActivity().getTitle().toString());
    super.onSaveInstanceState(outState);
}

但是当我尝试使用下面的“onCreateView”方法恢复/显示我的数据时,即使“savedInstanceState”变量不为空(我的日志显示正确的值),也不会发生任何事情。

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

    timeTextView = (TextView) view.findViewById(R.id.time_picker_text_view);
    dateTextView = (TextView) view.findViewById(R.id.date_picker_text_view);
    hourSpinner = (Spinner) view.findViewById(R.id.hour_spinner);
    minuteSpinner = (Spinner) view.findViewById(R.id.minut_spinner);
    topicGroupSpinner = (Spinner) view.findViewById(R.id.topic_group_spinner);
    topicSpinner = (Spinner) view.findViewById(R.id.topic_spinner);
    levelSpinner = (Spinner) view.findViewById(R.id.level_spinner);
    totalPriceTextView = (TextView) view.findViewById(R.id.total_price_text_view);
    datePickerButton = (Button) view.findViewById(R.id.date_picker_button);
    timePickerButton = (Button) view.findViewById(R.id.time_picker_button);
    createNewLessonButton = (Button) view.findViewById(R.id.create_new_lesson_button);

    if (savedInstanceState != null) {
        String time = savedInstanceState.getString("time");
        Log.i("TIME", time);

        getActivity().setTitle(time);
        dateTextView.setText(savedInstanceState.getString("date"));
        timeTextView.setText(savedInstanceState.getString("time"));

        int hourPosition = getIndexByString(hourSpinner, savedInstanceState.getString("hour"));
        int minutePosition = getIndexByString(minuteSpinner, savedInstanceState.getString("minute"));
        int topicGroupPosition = getIndexByString(topicGroupSpinner, savedInstanceState.getString("topicGroup"));

        hourSpinner.setSelection(hourPosition);
        minuteSpinner.setSelection(minutePosition);
        topicGroupSpinner.setSelection(topicGroupPosition);
    }


    return  view;
}

我尝试了很多事情都没有成功。有人可以给我任何建议吗?提前致谢。

【问题讨论】:

    标签: android android-fragments onsaveinstancestate


    【解决方案1】:

    问题出在您试图恢复视图状态的地方。 看看:

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        ...
        if (savedInstanceState != null) {
            //Restore the fragment's state here
        }
    }
    ...
    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    
    //Save the fragment's state here
    }
    

    该主题已经在 StackOverflow 上进行了深入评论。 只要看一下,您就会发现很多关于已保存状态和恢复它的信息。 Fragment's SavedState and Restoring It

    【讨论】:

    • 我也试过这个解决方案。但我有同样的问题。 “savedInstanceState”不为空,但我可以在 textviews 中显示我的数据。
    • @Override public void onActivityCreated(Bundle savedInstanceState)
    • 不在onCreateView()中,你确定你在这里而不是在onCreateView()中?
    • 您的 Activity 可能还没有准备好可视化您的内容,这就是为什么您应该在 onActivityCreated 中进行。希望这会有所帮助。
    • 最后,我解决了我的问题。谢谢你的帮助:-)
    【解决方案2】:

    问题是每次创建和添加具有空包数据的新 Fragment 实例时。在活动中添加新的Fragment 时,请执行以下操作

    在活动的onCreate() 或添加片段的任何地方,如下所示

    if (savedInstanceState == null) {
         getSupportFragmentManager().beginTransaction().add(R.id.frag_container, new Frag1()).commit();
    }
    

    【讨论】:

    • 同上。我试过这个解决方案。但我总是有同样的问题。我无法显示我的片段数据。
    • 将代码发布到您添加片段的活动中
    猜你喜欢
    • 2013-12-31
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多