2012-10-20 35 views
0

我有一個活動拒絕關閉第一次完成()被調用。我最初在活動中放置了一個取消按鈕,但後來我注意到,當我使用「後退」按鈕時,它也表現出相同的行爲。它可以這樣描述: 1.活動打開,並填入適當的數據(來自上一活動的列表視圖)。 2.按Back按鈕,所有字段都清除數據,但不會將用戶返回到原始活動。 3.再次按返回按鈕,用戶返回到原來的活動。Android - 完成()重新啓動當前活動

我可以發佈代碼,但我不確定問題出在當前活動還是主要活動中。我可以提到,切換到使用上下文菜單打開活動。

更新: 好吧,看起來這些建議都是正確的,主要活動確實啓動了2個版本的編輯活動。現在我只是想弄明白爲什麼。當我切換到列表項選項的上下文菜單時,我注意到發生了這種情況。然而,添加按鈕是一個菜單項。這裏是相關的代碼:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    super.onCreateOptionsMenu(menu); 

    // add(int groupId, int itemId, int order, int titleRes) 
    menu.add(0, INSERT_ID, 0, R.string.menu_insert); 
    menu.add(0, SETTINGS_ID, 1, R.string.sharedPrefButton); 
    menu.add(0, COMMON_DESC_ID, 2, R.string.commonDescButton); 
    menu.add(0, RESET_ID, 3, R.string.menu_reset); 
    return true; 
} 

/* 
* This is going to handle the "Add Expenditure" menu item. When this is selected, the 
* onOptionsItemSelected() method will be called with the item.getId() set to INSERT_ID 
* (the constant we used to identify the menu item). 
*/ 

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    switch(item.getItemId()) { 
     case INSERT_ID: 
      createExpenditure(); 
      break; 
     case SETTINGS_ID: 
      manageSharedPrefs(); 
      break; 
     case COMMON_DESC_ID: 
      manageCommonDesc(); 
      break; 
    } 
    return super.onMenuItemSelected(featureId, item); 
} 

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { 
    super.onCreateContextMenu(menu, v, menuInfo); 
    menu.add(0, DELETE_ID, 0, R.string.menu_delete); 
    menu.add(0, EDIT_ID, 0, R.string.menu_edit); 
} 

public boolean onContextItemSelected(MenuItem item) { 
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); 
    int itemId = item.getItemId(); 
    switch(itemId) { 

     case DELETE_ID: 
      mDbHelper.deleteExpenditure(info.id); 
      fillData(); 
      break; 

     case EDIT_ID: 
      Intent i = new Intent(this, ExpenditureEdit.class); 
      i.putExtra(ExpendituresDbAdapter.KEY_ROWID, info.id); 
      startActivityForResult(i, ACTIVITY_EDIT); 
      break; 
    } 

    return super.onContextItemSelected(item); 
} 
+1

請檢查是否有在上次活動中發佈的簡歷或開始方法可能會再次啓動活動......或者可能是您的活動在第一個地方推出了兩次... –

回答

0

發生這種情況是因爲顯然當onContextItemSelected被執行時,onMenuItemSelected被調用。雖然我爲仍然不確定爲什麼,如果我用一個條件我onMenuItemSelected方法中,一切似乎都很好地工作:

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 

    if (featureId == Window.FEATURE_CONTEXT_MENU) 
    { 
     Log.i("EZBudget","Context Menu"); 
    } 
    else if (featureId == Window.FEATURE_OPTIONS_PANEL) 
    { 
     switch(item.getItemId()) { 
     case INSERT_ID: 
      createExpenditure(); 
      break; 
     case SETTINGS_ID: 
      manageSharedPrefs(); 
      break; 
     case COMMON_DESC_ID: 
      manageCommonDesc(); 
      break; 
     } 

    } 

    return super.onMenuItemSelected(featureId, item); 
} 

我發現這個答案在另一篇文章:onContextItemSelected doesn't get called

1

看來,你開始同樣的活動兩次。這是你的活動堆棧:

Original Activity, starts ListActivity 
    ListActivity (no data in fields), starts another instance of itself 
     ListActivity (fill in appropriate data) 

現在,當你按下後退按鈕:

 ListActivity, close this second instance but... 
    ListActivity (still no data), the first instance resumes, so push back again 
Original Activity 

(如果沒有代碼,我不能幫你走得比來形容我認爲正在發生的事情...)

+0

嘿,看起來你是正確的,但我是仍然無法弄清楚爲什麼會發生這種情況,如果您有時間查看,我已更新了主要活動代碼的帖子。 – jwBurnside