我有一个Android活动,可以从数据库加载信息并将信息传递给另一个活动。
Activity 2处理信息并更新数据库,然后以这种方式重新启动活动:
Intent intent = new Intent(TransActivity.this, MainActivity.class);
TransActivity.this.startActivity(intent);
这样可以正常工作,但实际上并没有加载数据库中更新的新信息。如何启动第一个活动(mainactivity)并让它加载由活动二(TransActivity)更新的新信息?
答案 0 :(得分:1)
每当我需要做这种事情时,我都会使用Loader
。装载程序是为活动设置数据的极好方法,但它们并没有得到很好的理解。
您可以使用CursorLoader
,但这需要ContentProvider
而且我打赌你不想写其中一个。
我会编写一个自定义AsyncTaskLoader
子类来查询数据库并返回Cursor
。
查看加载程序的文档和示例应用程序,了解它对您的帮助。
此外,您应该查看Activity
方法startActivityForResult()
,setResult()
和onActivityResult()
,而不是重新启动主要活动。然后你的TransActivity
可以"返回"到你的MainActivity
。这是一个更好的流程。
一旦你有Loader
,你的MainActivity
就会调用LoaderManager.createLoader()
来启动加载程序。
您可以使用TransActivity
调用MainActivity.startActivityForResult()
。
然后,当您的TransActivity
更新了数据库后,它会调用setResult()
和finish()
。
这会调用onActivityResult()
中的MainActivity
覆盖,您可以在其中调用LoaderManager.restartLoader()
来加载新数据。
如果您不想使用加载程序,则可以在onActivityResult()
中重新查询数据库,因为您知道TransActivity
已完成更新。
答案 1 :(得分:1)
以这种方式开始您的活动
Intent i = new Intent (AcitivtyOne.this,Activitytwo.class);
startActivityForResult(i,REQUEST_CODE);
在Activity中更新信息会将结果传递回ActivityOne
Intent resultIntent = new Intent();
setResult(Activity.RESULT_OK, resultIntent);
finish();
以任何方式将数据放入结果意图中,并在ActivityOne中的onActivityResult中接收数据并完成剩下的工作..
对于参考,请使用此链接Getting a Result from an Activity