2011-12-14 45 views
1

我正嘗試使用句柄數據庫插入,更新和刪除(如記事本)。 我有後退鍵的問題,因爲當我按後退鍵時,我不想保存任何數據。在按下確認按鈕的正常情況下,它將被保存到sqlite中並顯示在列表視圖中。 如何通過返回鍵或更多按鈕事件來取消事件? 我正在嘗試使用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;比:

@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 2011-12-14 16:31:16

相關問題