Помогите разобраться с DialogFragment в android

334
13 мая 2017, 18:43

Стоит задача - реализовать в приложении alertDialog по нажатию на экран. В принципе это я сделал, оно работает:

mMap.setOnMapLongClickListener(new GoogleMap.OnMapLongClickListener() {
    @Override
    public void onMapLongClick(final LatLng latLng) {
     AlertDialog.Builder mBuilder = new AlertDialog.Builder(MapsActivity.this);
     View mView = getLayoutInflater().inflate(R.layout.dialog_isparking, null);
     Button yes = (Button) mView.findViewById(R.id.btnYes);
     Button no = (Button) mView.findViewById(R.id.btnNo);
}

Но есть проблема - при повороте экрана диалог пропадает. Как я понял, этого можно избежать, если использовать DialogFragment. Я сделал отдельный класс, за образец взял код отсюда и отсюда

Получилось так:

public class Dialog extends DialogFragment implements View.OnClickListener {
    public static Dialog newInstance(int title) {
        Dialog frag = new Dialog();
        Bundle args = new Bundle();
        args.putInt("title", title);
        frag.setArguments(args);
        return frag;
    }
    public android.app.Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder adb = new AlertDialog.Builder(getActivity())
            .setTitle("Title!")
            .setPositiveButton(R.string.yes, (DialogInterface.OnClickListener) this)
            .setNegativeButton(R.string.no, (DialogInterface.OnClickListener) this)
            .setMessage(R.string.message_text);
        return adb.create();
    }
    void showDialog() {
        DialogFragment newFragment = Dialog.newInstance(1);
        newFragment.show(getFragmentManager(), "dialog");
    }
    @Override
    public void onClick(View v) {
    }
}

Потом в main activity пытался сделать так:

public void onMapLongClick(final LatLng latLng) {
    Dialog dialog = new Dialog();
    dialog.showDialog();
}

При нажатии на экран приложение крашится, андроид студия пишет:

java.lang.NullPointerException: Attempt to invoke virtual method 'android.app.FragmentTransaction android.app.FragmentManager.beginTransaction()' on a null object reference

Помогите исправить ситуацию. Мой первый вопрос здесь, надеюсь, мысль донес верно.

Answer 1

Уберите метод void showDialog() из диалога, а в активити напишите:

 Dialog dialog = new Dialog();
 dialog.show(getFragmentManager(), "dialog");

Дайте диалогу осмысленное имя.

Answer 2

showDialog() должен быть в активити и подаваться туда должен getSupportFragmentManager(), если диалог на фрагменте то getChildFragmentManager()

READ ALSO
Как узнать IP адрес устройства?

Как узнать IP адрес устройства?

Сервер, на который я отправляю запрос определяет мой IP, а как получить этот IP программно, чтобы потом сравнить?

258
Как отключить “тень” при свайпе?

Как отключить “тень” при свайпе?

Когда тянешь пальцем экран вертикально, дотягиваешь до края и тянешь дальше, начинает проявляться полукруглая теньЕсть ли возможность её отключить?

191
String содержит запись PKCS7 как привести в читабельный вид

String содержит запись PKCS7 как привести в читабельный вид

Привет уважаемое комьюнити, есть некоторый код на Java, сей код включает в себя переменную типа String, которая в свою хранит следующее содержимое:

225
Можно ли через java установить время и дату на пк

Можно ли через java установить время и дату на пк

В java есть отличный класс Calendar, однако можно ли каким то образом задать время и дату компьютеру?

206