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