0

finish()が最初に呼び出されたときに閉じることを拒否するアクティビティがあります。もともとアクティビティに[キ​​ャンセル]ボタンを配置していましたが、[戻る]ボタンを使用しても同じ動作をすることに気付きました。これは次のように説明できます。1。アクティビティが開き、適切なデータが入力されます(前のアクティビティのリストビューから取得)。2. [戻る]ボタンを押すと、すべてのフィールドからデータが消去されますが、ユーザーは元のアクティビティに戻りません。3.もう一度[戻る]ボタンを押すと、ユーザーは元のアクティビティに戻ります。

コードを投稿することはできますが、問題が現在のアクティビティにあるのか、メインのアクティビティにあるのかわかりません。コンテキストメニューを使用してアクティビティを開くように切り替えたことに言及できます。

更新:わかりました。これらの提案は両方とも正しかったようです。主なアクティビティは、実際に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);
}
4

2 に答える 2

2

同じアクティビティを2回開始したようです。これはあなたのアクティビティスタックです:

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

(コードがなければ、私が起こっていると思うことを説明するよりも、あなたが動くのを助けることはできません...)

于 2012-10-20T20:52:59.467 に答える
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は呼び出されません

于 2012-10-22T13:30:00.017 に答える