2014-01-29 182 views
1

我有DialogFragment,其中包括DatePickerDialog。每當我設置日期,一個新的活動開始。當我按回時,它會返回到相同的活動。爲什麼活動沒有完成?活動未完成

在活動中,我開始在下面的方法對話框:

@Override 
public boolean onOptionsItemSelected(MenuItem item){ 
    switch(item.getItemId()){ 
     case R.id.calendar: 
      new ViewCalendar().show(getFragmentManager(), "Calendar"); 
      return true; 
    } 
    return false; 
} 

的片段我有以下幾點:

@Override 
public void onDateSet(DatePicker view, int y, int m, int d) { 
    c.set(y, m, d); 
    Intent intent = new Intent(getActivity(), Calendar.class); 
    getActivity().finish(); 
    startActivity(intent); 
} 

編輯:

我要描述問題多一點。

我有一個按鈕啓動DatePickerDialog的活動A.我選擇一個日期,併發生以下情況:

  • 活動A完成。
  • 已創建活動A的新實例。

現在發生的事情是:

  • 活動A停留在背景。
  • 已創建活動A的新實例。

活動堆棧現在是A - A,這就是爲什麼如果我按回它回到較舊的實例。

+1

你的命令有錯誤的,你應該先啓動活動,然後完成像'startActivity(i)將當前的活動; \t \t \t getActivity()。finish();' –

+0

change Intent intent = new Intent(getActivity(),Calendar.class); startActivity(intent); getActivity()結束(); – Piyush

+0

仍然不能正常工作 – Nfear

回答

2

其實你返回堆棧不明確,那就是你以前的活動是開放的,而在 背壓的原因。所以清楚你的Back堆棧,它會完美的工作。

使用這個代碼:

@Override 
public void onDateSet(DatePicker view, int y, int m, int d) { 
    c.set(y, m, d); 
    Intent intent = new Intent(getActivity(), Calendar.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(intent); 
    getActivity().finish(); 
} 
+0

不是真的解決方案。新活動開始時,舊活動必須完成。 – Nfear

+0

實際上,您的活動已完成,但您的歷史記錄不清楚,因此如果您的點擊後退按鈕,您的活動重新啓動。所以應用這行代碼:yourIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); – balaji

+0

@Nfear我已經更新了我的答案,檢查並讓我知道.... – balaji

0

use getActivity()。this.finish();而不是getActivity()。finish();

+0

這不起作用。 – Nfear

+0

我希望有一些解釋,爲什麼你認爲這兩個陳述之間存在差異。 – dm78

0

您應該首先啓動意圖,然後完成當前活動。

@Override 
public void onDateSet(DatePicker view, int y, int m, int d) { 
    c.set(y, m, d); 
    Intent intent = new Intent(getActivity(), Calendar.class); 
    startActivity(intent); 
    getActivity().finish(); 
} 
+0

如果你想在背部按下你的活動。重寫您的OnBackPressed方法: – balaji

+0

這不起作用。 – Nfear