2011-12-14 9 views
1

メモ帳などの挿入、更新、削除でハンドルデータベースを使用しようとしています。 バックキーを押したときにデータを保存したくないため、バックキーに問題があります。通常、確認ボタンを押すとsqliteに保存され、listviewに表示されます。 バックキー以上のボタンイベントでキャンセルイベントを作成するにはどうすればよいですか? 私はonBackPressed、onPause、およびonResumeを使用しようとしています。 編集ページで戻るキーを押すと、onPause()が呼び出されますが、戻るキーを押したときに、 saveState()を使用しません。どうしたらいいですか? フィードバックをいただけますか?おかげさまで Androidデータを保存せずにバックキーでイベントをキャンセルする方法

@Override 
protected void onPause() { 
    Toast.makeText(this, "onPause", Toast.LENGTH_SHORT).show(); 
    super.onPause(); 
    saveState(); 

} 

@Override 
protected void onResume() { 
    Toast.makeText(this, "onResume", Toast.LENGTH_SHORT).show(); 
    super.onResume(); 
    Resume_populateFields(); 
} 

@Override 
public void onBackPressed() { 
    Toast.makeText(this, "onBackPressed", Toast.LENGTH_SHORT).show(); 
     super.onBackPressed(); 
     finish();  
}  

private void saveState() { 
    String name = (String) nameEdit.getText().toString(); 
    String category = (String) categoryEdit.getText().toString(); 
    String expired_date = (String) expired_Date_Btn.getText().toString(); 
    Bitmap imageBitmap = ((BitmapDrawable) mImageView.getDrawable()) 
      .getBitmap(); 
    ByteArrayOutputStream imageByteStream = new ByteArrayOutputStream(); 
    imageBitmap.compress(Bitmap.CompressFormat.PNG, 100, imageByteStream); 

    if (mRowId == null) { 
     long id = mDbHelper.insertItem(category, name, expired_date, 
       imageByteStream); 

     if (id > 0) { 
      mRowId = id; 
     } 
    } else { 
     mDbHelper.updateItem(mRowId, category, name, expired_date, 
       imageByteStream); 
    } 
} 

    private void Resume_populateFields() { 
    if (mRowId != null) { 
     Cursor data = mDbHelper.fetchItem(mRowId); 
     startManagingCursor(data); 
     // load information from sqlite 
     nameEdit.setText(data.getString(data 
       .getColumnIndexOrThrow(FridgeDbAdapter.KEY_NAME))); 
     categoryEdit.setText(data.getString(data 
       .getColumnIndexOrThrow(FridgeDbAdapter.KEY_CATEGORY))); 
     expired_Date_Btn.setText(data.getString(data 
       .getColumnIndexOrThrow(FridgeDbAdapter.KEY_EXPIRED_DATE))); 

    } else { 
     // call display date when list is clicked 
     expired_Date_Btn.setText(new StringBuilder().append(mDay) 
       .append("/") 
       // month is 0 based. Then add 1 
       .append(mMonth + 1).append("/").append(mYear).append(" ")); 
    } 

} 

答えて

2

ブールフラグisOnBackeyPressedを定義します。 Than:

@Override 
public void onBackPressed() { 
    Toast.makeText(this, "onBackPressed", Toast.LENGTH_SHORT).show(); 
     super.onBackPressed(); 
     isOnBackeyPressed = true; 
     finish();  
}  


@Override 
protected void onPause() { 
    Toast.makeText(this, "onPause", Toast.LENGTH_SHORT).show(); 
    super.onPause(); 
    if (!isOnBackKeyPressed) 
     saveState(); 

} 

ライフサイクルが異なる場合は、そのアイデアを採用してください。

+0

くそ、私は書いている途中だった – zode64

+0

あなたの返信ありがとうございます!それは簡単で、適切に動作します。 – wholee1

関連する問題