片段重置和丢失数据

时间:2017-05-03 10:13:01

标签: android android-fragments android-lifecycle

我正在开发一款需要连接到某些硬件的Android应用,并通过线性图表向最终用户提供实时数据。为此,我使用MPAndroid库在片段内显示此线性图表。 这就是Linear Chart

的样子

我的问题是当我转到另一个视图并回到我的图表片段时,图表会丢失所有值并返回到初始状态。我尝试将我的图表inisialization放在OnCreate然后在OnAttach中,但它没有用。我的图表需要保持这些值直到小时结束,然后从屏幕移动到屏幕重置所有内容。 这是我的代码:

        c=Calendar.getInstance();
        minute=c.get(Calendar.MINUTE);
        hour=c.get(Calendar.HOUR_OF_DAY);
        setXAxisValues( String.valueOf(hour));
        setYAxisValues();

这个代码只有在我第一次输入片段时才需要调用,而且永远不会被再次调用,因为它只是设置了图表。

修改

根据Piyush的建议,这是我的代码:

    if (savedInstanceState!= null) {
        yVals=savedInstanceState.getParcelableArrayList("savedList");
        Log.e("TAG","********************************************saved instance*********************************************");
    }
    else {
        c=Calendar.getInstance();
        minute=c.get(Calendar.MINUTE);
        hour=c.get(Calendar.HOUR_OF_DAY);
        setXAxisValues( String.valueOf(hour));
        Log.e("TAG","********************************************not saved*********************************************");
        yVals=setYAxisValues();
    }
    final View view = inflater.inflate(R.layout.fragment_acceuil, container, false);

2 个答案:

答案 0 :(得分:0)

当活动开始与用户交互时,

onResume被调用。

所以你最好再打个电话!

  @Override
        protected void onResume() {
            super.onResume();

            c=Calendar.getInstance();
            minute=c.get(Calendar.MINUTE);
            hour=c.get(Calendar.HOUR_OF_DAY);
            setXAxisValues( String.valueOf(hour));
            setYAxisValues();

        }

答案 1 :(得分:0)

你必须在MainActivity中实现FragmentManager.OnBackStackChangedListener,然后在这样的调用onResume方法中实现

   @Override
    public void onBackStackChanged() {
        FragmentManager fragmentManager = getSupportFragmentManager();
        Fragment fr = fragmentManager.findFragmentById(R.id.frame_container);
        if (fr != null) {
            fr.onResume();
        }
    }

然后在每个片段的onResume方法中,您再次重新加载更新的数据