0

メモ帳のチュートリアルと非常によく似た、単純にデータを保存してリスト ビューに表示する Android アプリケーションがあります。残念ながら、私の Add アクティビティは途中で機能しなくなったようです。データを追加しようとして [確認] を押すと、アクティビティがリロードされ (画面がわずかにちらつきます)、フィールドに入力したデータはすべて消去されます。onSaveInstanceState()に到達していないことを確認しました。このメソッドは、finish() で自動的に呼び出されるという印象を受けました。前述のように、一度は機能していました。私のコードにエラーが発生した場所を誰かが見つけられるでしょうか? 関連する部分であると思われるものを貼り付けます。

 confirmButton.setOnClickListener(new View.OnClickListener() {

        public void onClick(View view) {

            //Verify that fields are filled out
            String description = mDescriptionText.getText().toString();
            String amount = mAmountText.getText().toString();
            if(description.length() == 0 || amount.length() == 0) {
                if(description.length() == 0) {
                    Context context = getApplicationContext();
                    CharSequence text = "A description is required";
                    int duration = Toast.LENGTH_SHORT;
                    Toast toast = Toast.makeText(context, text, duration);
                    toast.show();
                }
                else {
                    Context context = getApplicationContext();
                    CharSequence text = "An amount is required";
                    int duration = Toast.LENGTH_SHORT;
                    Toast toast = Toast.makeText(context, text, duration);
                    toast.show();
                }

            }
            else {
                /* Call this to set the result that your activity will return to its caller */
                setResult(RESULT_OK);
                /* Call this when your activity is done and should be closed. The ActivityResult is propagated back to 
                whoever launched you via onActivityResult() */ 


                finish();
            }
        }


    @Override
protected void onSaveInstanceState(Bundle outState) {
    Log.i("expEdit","onSaveInstance State Reached");
    super.onSaveInstanceState(outState);
    saveState();
    outState.putSerializable(EZBudgetDbAdapter.KEY_ROWID, mRowId);
}


 private void saveState() {
    Log.i("expEdit","saveState Reached");
    String description = mDescriptionText.getText().toString();
    String amount = mAmountText.getText().toString();
    Double dAmount = 0.0;
    if(amount != "") {
        dAmount = Double.valueOf(amount).doubleValue();
    }

    if (mRowId == null) {
        long id = mExpDbHelper.createExpenditure(description, dAmount);
        if (id > 0) {
            mRowId = id;
        }

        if (mSaveDesc.isChecked()) {
            // Save the description to the CommonDesc table
            mCommDbHelper = new CommonDescDbAdapter(this);
            mCommDbHelper.open();
            mCommDbHelper.createCommonDesc(description);

        }

    } else {

        mExpDbHelper.updateExpenditure(mRowId, description, dAmount);

        if (mSaveDesc.isChecked()) {
            // Save the description to the CommonDesc table
            mCommDbHelper = new CommonDescDbAdapter(this);
            mCommDbHelper.open();
            mCommDbHelper.createCommonDesc(description);

        }


    }
}
4

1 に答える 1

1

onSaveInstanceState() は、finish() の後に呼び出されません。以下のonSaveInstanceStateを参照してください

あなたのコードはきれいではありません。無駄にコードを複製しないでください。使用する必要があります

    Context context = getApplicationContext();
    CharSequence text;
    int duration = Toast.LENGTH_SHORT;

    if(description.length() == 0) {                    
        text = "A description is required";                 
    } else {                    
        text = "An amount is required";                    
    }
    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
于 2012-10-19T18:48:28.400 に答える