Вылетает java.lang.OutOfMemoryError при попытке открывать DialogFragment

Рейтинг: 1Ответов: 1Опубликовано: 27.03.2015

Я пытаюсь по нажатию на кнопку контекстного меню вызвать объект DialogFragment, но, увы, вылетает:

03-27 13:44:28.545    1685-1685/com.HelloWorld.timextendsreminder.app E/art﹕ Throwing OutOfMemoryError "Failed to allocate a 25376944 byte allocation with 16777216 free bytes and 19MB until OOM"
--------- beginning of crash
03-27 13:44:28.546    1685-1685/com.HelloWorld.timextendsreminder.app E/AndroidRuntime﹕ Error reporting crash
java.lang.OutOfMemoryError: Failed to allocate a 25376944 byte allocation with 16777216 free bytes and 19MB until OOM

Погуглил, часто это исключение вылетает у тех, кто работает с BitmapFactory/Bitmap, я же с ними в этом приложение не имею дела. Пытался очищать код DialogFragment, чтобы хотя бы просто высвечивало простой диалог, но без толку.

Кто нибудь сталкивался?

Код DialogFragment

Alarm alarm;
EditText edit;
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    alarm = new Alarm();
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setView(getLayoutInflater(savedInstanceState).inflate(R.layout.edit, null))
            .setTitle("Rename the task:")
            .setPositiveButton("OK",this)
            .setNegativeButton("Back",this);
    Dialog d = new Dialog(getActivity());
    edit = (EditText) d.findViewById(R.id.msg_et);
    return builder.create();
}
@Override
public void onClick(DialogInterface dialog, int which) {
    if (!TextUtils.isEmpty(edit.getText())) {
        alarm.setName(edit.getText().toString());
        alarm.persist(RemindMe.db);
    }
    else {
        Toast.makeText(getActivity(), "Enter a message", Toast.LENGTH_SHORT).show();
    }
}

Alarm - класс-модель таблицы в БД.

Фрагмент кода с вызываемой Activity:

 case CM_EDIT:
            editDialog.show(getSupportFragmentManager(),"editDialog");
            break;

Ответы

▲ 3Принят

Скорее всего ошибка в этом месте:

getLayoutInflater(savedInstanceState)

Уберите оттуда Bundle, чтобы получилось просто:

getActivity().getLayoutInflater()

вызываемое из активити.


P.S. Впервые вижу, чтобы Bundle в сей метод пихали, загнал в гугл строку

getLayoutInflater(savedInstanceState)

И первая же ссылка подтвердила мои подозрения)