这是我的情况。我的应用程序旨在报告不同的活动。具体来说,我有一个表单(Fragment),用户可以在其中输入数据并保存。之后用户可以预览表单(Activity)。 PreviewActivity使用SQLiteCursorLoader。在PreviewActivity中,用户可以切换到FormActivity,以便更改以前在Form Fragment中输入的数据。它由startActivityForResult()调用。之后,保存过程开始,它依赖于调用AsyncTask,它在doInBackground()方法中处理插入/更新到数据库中。 UI Thread遵循进一步的说明,在FormActivity中设置Result并关闭FormActivity。在onActivityresult()方法的PreviewActivity中,我在LoaderManager上调用restartLoader()方法。我认为我的情况完全不同,因为我需要重新启动几个加载器(实际上是9个) - 这是我的数据库架构的结果。在onLoadFinished()方法中每次加载后,我都会调用我的控制器来更新不同的视图部分。问题是数据没有刷新。下面是一些可视化问题的示例代码:
startActivityForResult(new Intent(this, FormActivity.class), REQUEST_CODE);
在FormActivity中填写表单后
save() {
new MyAsyncTaskFormSaver().execute(); //saving data
finish();
}
再次在PreviewActivity中:
@Override
protected void onCreate() {//here I also use restartLoader()
super.onCreate();
restartLoader();
}
void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == REQUEST_CODE) {
restartLoaders();
}
}
void restartLoaders() {
final LoaderManager loaderManager = getLoaderManager();
loaderManager.restartLoader(1, null, this);
loaderManager.restartLoader(2, null, this);
loaderManager.restartLoader(3, null, this);
loaderManager.restartLoader(4, null, this);
loaderManager.restartLoader(5, null, this);
loaderManager.restartLoader(6, null, this);
loaderManager.restartLoader(7, null, this);
loaderManager.restartLoader(8, null, this);
loaderManager.restartLoader(9, null, this);
loaderManager.restartLoader(10, null, this);
}
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
switch(loader.getId()) {
case 1:
mController.populateView1(data, PreviewActivity.this);
break;
case 2:
mController.populateView2(data, PreviewActivity.this);
break;
case 3:
mController.populateView3(data, PreviewActivity.this);
break;
case 4:
mController.populateView4(data, findViewById(R.id.view4));
break;
case 5:
mController.populateView5(data,findViewById(R.id.view5));
break;
case 6:
mController.populateView6(data, findViewById(R.id.view6));
break;
case 7:
mController.populateView7(data, findViewById(R.id.view7));
break;
case 8:
mController.populateView8(data, findViewById(R.id.view8));
break;
case 9:
mController.populateView9(data, findViewById(R.id.view9), getSupportFragmentManager());
break;
case 10:
mController.populateView10(data, findViewById(R.id.view10), getSupportFragmentManager());
break;
default:
throw new IllegalArgumentException(TAG + ": unknown data Id in onLoadFinished method. Id = " + loader.getId());
}
在几个填充方法中,我需要SupportfragmentManager,以便在用户点击按钮时显示对话框,该按钮显示照片预览但不相关。
我的问题是:
为什么保存并切换到PreviewActivity后数据不会刷新?
我阅读了许多how -o-articles,但其中大多数都涉及ListView中适配器中使用的一个CursorLoader的情况。
我是否错误地使用了SQliteCursorLoader?
我尝试在onStop()中销毁Lader但没有。也许它不是CursorLoader。
也许我错误地使用了AsyncTask?
任何信息,帮助,批评,特别是如何发挥它,非常感谢。
编辑:
好的,我发现加载程序会更新数据,只要它自己插入/更新/替换/删除数据。所以另一个问题提出了:
如何在活动之间交换装载机?
好的,我在这里找到答案: Global Loader (LoaderManager) for reuse in multiple Activities / Fragments