Android как отменить событие клавишей возврата без сохранения данных - PullRequest
1 голос
/ 14 декабря 2011

Я пытаюсь использовать дескриптор базы данных со вставкой, обновлением и удалением, например, блокнотом. У меня проблема с клавишей возврата, потому что когда я нажимаю клавишу возврата, я не хочу сохранять какие-либо данные. В обычном случае, который нажимает кнопку подтверждения, он будет сохранен в sqlite и будет отображен в виде списка. Как я могу сделать отмену события с помощью кнопки возврата или более кнопки? Я пытаюсь использовать onBackPressed, onPause и onResume. Когда я нажимаю клавишу "Назад" на странице редактирования, вызывается onPause (), но я не хочу использовать saveState (), когда я нажал клавишу возврата. Как я могу это сделать? Не могли бы вы дать мне обратную связь? Спасибо.

@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(" "));
    }

}

1 Ответ

2 голосов
/ 14 декабря 2011

Определить логический флаг 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();

}

Если ваш жизненный цикл отличается, просто примите идею.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...