2012-10-20 3 views
0

finish()가 처음 호출 될 때 닫는 것을 거부하는 활동이 있습니다. 원래는 Cancel 버튼을 액티비티에 넣었지만, 뒤로 버튼을 사용할 때도 같은 동작을한다는 것을 알았습니다. 다음과 같이 설명 할 수 있습니다. 1. 활동이 열리고 적절한 데이터가 채워집니다 (이전 활동의 목록보기에서 제공됨). 2. 뒤로 단추를 누르면 모든 필드에서 데이터가 지워지지만 사용자는 원래 활동으로 돌아 가지 않습니다. 3. 뒤로 단추를 다시 누르면 사용자가 원래 활동으로 돌아갑니다.Android - Finish()가 현재 활동을 다시 시작합니다.

코드를 게시 할 수 있지만 문제가 현재 활동이나 주 활동에 있는지는 확실하지 않습니다. 컨텍스트 메뉴를 사용하여 활동을 열어 보았습니다.

업데이트 : 이 두 가지 제안이 모두 올바른 것처럼 보입니다. 주요 활동은 실제로 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

관련 문제