Стоит задача - реализовать в приложении 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
Помогите исправить ситуацию. Мой первый вопрос здесь, надеюсь, мысль донес верно.
Уберите метод void showDialog() из диалога, а в активити напишите:
Dialog dialog = new Dialog();
dialog.show(getFragmentManager(), "dialog");
Дайте диалогу осмысленное имя.
showDialog() должен быть в активити и подаваться туда должен getSupportFragmentManager(), если диалог на фрагменте то getChildFragmentManager()
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники