2013-07-17 64 views
0

我有一個名爲NfcScannerActivity的主菜單屏幕的應用程序。目前它在清單中沒有啓動模式(標準)。如果您點擊getRota,它會將您轉到清單中定義爲'singleTask'的rota屏幕,它只是一個webcall數據的列表視圖。intent and onNewIntent

在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。

Intent i = new Intent(this, NfcscannerActivity.class); 
      i.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      i.putExtra("nextRota", nextDay); 
      i.setAction("NEXT_ROTA"); 
      startActivity(i); 

然後在oncreate的NfcScannerActivity我有以下。

if(intent.getAction().equalsIgnoreCase("NEXT_ROTA")){ 

      Log.e(TAG, "next rota action"); 
      String date = intent.getStringExtra("nextRota"); 



      getNextRota(date); 


     } 

getNextRota(日期)調用一個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'intent動作。我必須在onNewIntent中做同樣的事嗎?

回答

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

什麼上述應該做的是允許您創建儘可能多的Rota屏幕,但只能擁有一個NfcScannerActivity

+0

嗨,你能看看我的更新請。謝謝 – turtleboy

+0

是的,你必須在onNewIntent中做同樣的事情,當調用onNewIntent時不會調用onCreate。 – triggs

+0

好的非常感謝您的幫助 – turtleboy