我的应用程序有一个名为NfcScannerActivity的主菜单屏幕。目前它在清单中没有启动模式(标准)。如果你点击getRota,它会带你进入rota屏幕,该屏幕在清单中被定义为'singleTask',并且只是来自网络摄像头的数据的列表视图。
在rota屏幕中,您可以从optionsMenu栏中单击nextRota。发生这种情况时,会启动一个指定菜单屏幕(NfcScannerActivity)的意图,因为这是进行网络搜索以获取第二天的rota数据的地方。一旦检索到数据,再次启动rota屏幕。
所有这一切都运行良好,但我确信应用程序中存在一些问题,因为任务中有多个菜单屏幕实例。如果我将NfcScannerActivity指定为'SingleTask',那么当您单击下一个rota时,它将保留在菜单屏幕上,就像它没有处理“NEXT_ROTA”意图操作一样。
据我所知,我可能必须在NfcScannerActivity活动中覆盖onNewIntent。
这是怎么做到的?我尝试了以下内容。
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
}
这似乎没有处理'NEXT_ROTA'意图行动。谢谢亚光。
[EDIT1]
当用户从选项菜单中单击next_rota时,这就是我在rota活动中所拥有的。
Intent i = new Intent(this, NfcscannerActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.putExtra("nextRota", nextDay);
i.setAction("NEXT_ROTA");
startActivity(i);
然后在NfcScannerActivity的onCreate中,我有以下内容。
if(intent.getAction().equalsIgnoreCase("NEXT_ROTA")){
Log.e(TAG, "next rota action");
String date = intent.getStringExtra("nextRota");
getNextRota(date);
}
getNextRota(date)调用AsyncTask使webcall获取下一个rota的数据。在onPostExecute中,它执行以下操作。
Intent intent = new Intent(NfcscannerActivity.this,
GetRota.class);
Bundle b = new Bundle();
b.putSerializable("rotaArray", rotaArray);
intent.putExtra("rotaArrayBundle", b);
startActivity(intent);
所以我已经在onCreate中的NfcScannerActivity中处理了'NEXT_ROTA'意图动作。我是否必须在onNewIntent中做同样的事情?
答案 0 :(得分:0)
尝试以下
在“指定菜单屏幕时启动意图”
时的rota屏幕活动Intent intent = new Intent(<rota screen activity>, NfcScannerActivity.class);
intent.setAction("NEXT_ROTA");
//this brings the previous existing activity to the front of the stack
//instead of creating a new one
intent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startActivity(intent);
在NfcScannerActivity
中@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
if(intent.getAction().equals( "NEXT_ROTA")){
String date = intent.getStringExtra("nextRota");
getNextRota(date);
}
}
上面应该做的是允许你创建任意数量的Rota Screens,但只有一个NfcScannerActivity