intent和onNewIntent

时间:2013-07-17 08:54:49

标签: android android-intent android-activity

我的应用程序有一个名为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中做同样的事情?

1 个答案:

答案 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