And*_*rew 18 android single-instance android-activity
我希望我的应用程序的Activity堆栈上的活动只有一个实例.我有几个是ListActivities的屏幕,当我更改ListActivity的另一个实例(添加,编辑,删除等)时,我不想经历更新ListActivity的前一个实例中的列表的痛苦和痛苦. (或者有一种简单的方法可以做到这一点吗?).
注意:我已经读过singleTop会完成这个(虽然如果你点击后退按钮会破坏Activity),但它不起作用.我有一个菜单,如果我进入我的收件箱屏幕,然后我转到我的快捷列表屏幕,然后我再次进入我的收件箱屏幕,它会创建一个新的收件箱活动.
现在,在我的ListActivities上,我将launchMode设置为singleInstance.问题是:如果我使用startActivityForResult启动另一个Activity,onActivityResult处理程序会立即触发(在创建新Activity之前).当我在下一个屏幕上执行必要的操作以返回结果时,onActivityResult处理程序不会触发.
到底是怎么回事?
以下是我如何解雇新活动:
Intent intentLaunchQuickList = new Intent(ActivityMyList.this, ActivityQuickList.class);
startActivityForResult(intentLaunchQuickList, REQUEST_QUICKLIST);
Run Code Online (Sandbox Code Playgroud)
以下是我返回结果的方法:
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
QuickListItem qlItem = m_Adapter.getItem(position);
if (qlItem != null && qlItem.getQLId() != -1) {
Intent data = new Intent();
data.putExtra("ql_id", qlItem.getQLId());
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
}
else {
getParent().setResult(Activity.RESULT_OK, data);
}
}
finish();
}
Run Code Online (Sandbox Code Playgroud)
这是我的onActivityResult处理程序:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_QUICKLIST) {
if (resultCode == Activity.RESULT_OK) {
Bundle extras = data.getExtras();
if (extras != null) {
int id = extras.getInt("ql_id");
if (id > 0) {
launchQLItemsThread(id);
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Wal*_*ndt 24
从以下文档startActivityForResult:"例如,如果您正在启动的活动使用singleTask启动模式,它将不会在您的任务中运行,因此您将立即收到取消结果." singleInstance活动是一样的.
换句话说,如果要使用sAFR,则需要处理多个活动实例.我建议将ListActivity实例的列表状态存储onPause到某个应用程序全局点(单例或其他),然后从中加载onResume.然后,即使ListActivity将创建多个实例,最上面的实例将始终在旧数据恢复之前更新数据,并且列表将始终显示给用户当前.
请注意,如果您的数据是持久性的,那么您应该这样做,因为您的整个过程可以在onPause调用后随时被系统杀死,如果您在返回时没有保存任何更改,则他们在一些 - 通常是罕见和不可预测的 - 情况下,可能会悄然失去.在这种情况下,您希望使用本地文件或SQLite数据库,而不是持久保存到网络. onPause需要快速返回,因为用户在运行时无法与系统交互,因此请保存到本地存储,然后在其他时间同步到网络,可能是通过启动的服务onPause.
| 归档时间: |
|
| 查看次数: |
14441 次 |
| 最近记录: |