0

我有一个应用程序,它有一个名为 NfcScannerActivity 的主菜单屏幕。目前它在清单中没有启动模式(标准)。如果您单击 getRota,它会将您带到在清单中定义为“singleTask”的列表屏幕,它只是来自网络呼叫的数据的列表视图。

在轮播屏幕中,您可以从选项菜单栏中单击 nextRota。发生这种情况时,将启动一个指定菜单屏幕(NfcScannerActivity)的意图,因为这是进行网络调用以获取第二天的轮播数据的地方。一旦检索到数据,轮播屏幕就会再次启动。

所有这一切都很好,但我确信应用程序中存在一些问题,因为任务中有多个菜单屏幕实例。如果我将 NfcScannerActivity 指定为“SingleTask”,那么当您单击下一个轮播时,它会停留在菜单屏幕上,就好像它没有处理“NEXT_ROTA”意图操作一样。

我知道我可能必须在 NfcScannerActivity 活动中覆盖 onNewIntent。

这是怎么做到的?我试过以下。

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
    }

.

这似乎无法处理“NEXT_ROTA”意图操作。谢谢马特。

[编辑1]

当用户从选项菜单中单击 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 进行网络调用以获取下一个 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 中做同样的事情吗?

4

1 回答 1

0

尝试以下

在“启动指定菜单屏幕的意图”时的轮播屏幕活动中

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);      
    }       
}

上面应该做的是允许您创建任意数量的轮播屏幕,但只有一个 NfcScannerActivity

于 2013-07-17T09:08:28.217 回答