2011-12-14 3 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

+0

Спасибо за ваш ответ !! это просто, и он работает правильно. – wholee1