2011-10-28 56 views
0

我有一個有趣的問題。我在我的android應用程序中實現了一個服務實現,它與服務器同步,如果有新的訂單,它會顯示一個通知和一個帶有SHO/DISMISS按鈕的對話框。因爲無論當前正在運行的活動如何,我都需要顯示對話框,因此當出現新訂單時,我已將其作爲從服務開始的另一項活動實施。有更多的startActivity調用時,對話框的活動只啓動一次

的活動不設置任何看法,只是創建一個AlertDialog。 SHOW按鈕啓動OrdersListActivity,DISMISS按鈕只是關閉對話框。一切正常,但只在第一次。如果我解散對話框,並且另一個命令來了,它會再次顯示。但是,如果我點擊SHOW按鈕,它將顯示OrdersList,但是當另一個訂單稍後出現時,對話框將不會顯示。儘管根據logcat,活動已啓動。我已經搞了幾個小時了,你能幫我嗎?謝謝。

這裏是從我的服務類中的方法(進行通知,發送一個廣播並啓動對話活性):

公共無效notifyNewOrder(){

Context context = getApplicationContext(); 

    Intent notificationIntent = new Intent(this, OrdersService.class); 
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, android.content.Intent.FLAG_ACTIVITY_NEW_TASK); 

    newOrderNotification.setLatestEventInfo(this, getString(R.string.notification_text), getString(R.string.notification_text), contentIntent); 
    notificationManager.notify(NOTIFICATION_ID, newOrderNotification); 


    Intent intent = new Intent(NEW_ORDER_RECEIVED); 
    sendBroadcast(intent); 

    Intent dialog = new Intent(context, NotificationDialog.class); 
    dialog.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(dialog); 

} 

這裏是的代碼NotificationDialog活動類:

公共類NotificationDialog延伸活動{

private static final int DIALOG_NEW_ORDER = 0; 
private static final String LOG_TAG = "NotificationDialog"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    Log.d(LOG_TAG, "onCreate - creating activity..."); 

} 

@Override 
public void onResume() { 

    super.onResume(); 
    Log.d(LOG_TAG, "onResume - starting the dialog..."); 
    showDialog(DIALOG_NEW_ORDER); 

} 



@Override 
protected Dialog onCreateDialog(int id) { 

    Dialog dialog; 

    switch(id) { 
     case DIALOG_NEW_ORDER: 

      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      builder.setMessage(R.string.notification_dialog_new_order) 
        .setCancelable(false) 
        .setPositiveButton(R.string.notification_dialog_show, new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 

          /* 
          * Cancel the notification 
          */ 
          NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
          notificationManager.cancel(OrdersService.NOTIFICATION_ID);        

          /* 
          * Go to the list 
          */ 
          Intent listIntent = new Intent(getApplicationContext(), OrdersListActivity.class); 
          startActivity(listIntent); 

          dialog.dismiss(); 
          finish(); 

         } 

        }) 
        .setNegativeButton(R.string.notification_dialog_dismiss, new DialogInterface.OnClickListener() { 
         public void onClick(DialogInterface dialog, int id) { 

          /* 
          * Cancel the notification 
          */ 
          NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
          notificationManager.cancel(OrdersService.NOTIFICATION_ID); 
          dialog.dismiss(); 
          finish(); 
         } 
        }); 

      dialog = builder.create(); 

      break;   
     default: 
      dialog = null; 
    } 

    return dialog; 
} 

}

我已經添加在NotificationDialog活動的onCreate和的onResume方法的一些日誌,發現了以下內容:

  1. 第一次NotificationDialog活動開始時,這些打印調試消息出來
  2. 第二時間,並且所有的其它時間,它們將顯示不出來,雖然logcat的說:10月10日至28日:00:38.074:INFO/ActivityManager(63):開始:意向{FLG = 0x10000000的CMP = PL。從PID 1001
mymeal.orders/.services.NotificationDialog} 210
+0

更改標誌FLAG_ACTIVITY_CLEAR_TOP –

+0

大,真正的工作。我想我必須仔細看看活動標誌。再次感謝。 –

+0

如果有效。我將我的評論作爲答案提出,請接受它:) –

回答

2

將標誌更改爲FLAG_ACTIVITY_CLEAR_TOP。請注意,服務器上的新數據沒有任何影響。

相關問題