2012-10-20 36 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