Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/206.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 片段重置和丢失数据_Android_Android Fragments_Android Lifecycle - Fatal编程技术网

Android 片段重置和丢失数据

Android 片段重置和丢失数据,android,android-fragments,android-lifecycle,Android,Android Fragments,Android Lifecycle,我正在开发一款Android应用程序,它需要连接到一些硬件,并通过线性图表向最终用户提供实时数据。为此,我使用MPAndroid库在片段中显示这个线性图。 这就是它的样子 我的问题是,当我转到另一个视图并返回到我的图表片段时,图表将丢失其所有值并返回到初始状态。我试着将我的图表在OnCreate中进行初始化,然后在OnAttach中进行初始化,但没有成功。我的图表需要将这些值保留到一小时结束,但在屏幕之间移动会重置所有内容。 这是我的代码: c=Calendar.getInsta

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

我的问题是,当我转到另一个视图并返回到我的图表片段时,图表将丢失其所有值并返回到初始状态。我试着将我的图表在OnCreate中进行初始化,然后在OnAttach中进行初始化,但没有成功。我的图表需要将这些值保留到一小时结束,但在屏幕之间移动会重置所有内容。 这是我的代码:

        c=Calendar.getInstance();
        minute=c.get(Calendar.MINUTE);
        hour=c.get(Calendar.HOUR_OF_DAY);
        setXAxisValues( String.valueOf(hour));
        setYAxisValues();
这段代码只有在我第一次输入片段时才需要调用,以后再也不会调用,因为它只是设置了图表

编辑

根据皮尤斯的建议,这是我的代码:

    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);

当活动开始与用户交互时,调用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();

        }

您必须在MainActivity中实现FragmentManager.OnBackbackChangedListener,然后以这种方式调用onResume方法

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

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

在使用片段时,您必须注意一些点,每当片段被杀死时,它将删除所有数据,如果您返回到该片段,您将无法再次获取数据。要存储数据,您可以使用DataModel进行临时存储或使用SharedReference或使用SQlite或MYSql进行存储。您正在使用片段,因此我的意见是将数据存储在
onSavedInstance()
方法中,并在
onCreateView()中获取数据
检查捆绑包是否为空。如果不为空,则设置您的数据,该数据将为您提供旧数据而不会丢失。同时在
onCreateView()
方法中设置
setRetainInstance(true)
。我尝试过,但仍然无法返回数据。@Meknesshamida“转到另一个视图”是什么意思?这是新活动吗?还是同一活动中的新片段?在这两种情况下,我都需要保留数据。