У меня есть приложение, в котором сообщение отправляется и его отчет получен через некоторое BroadcastReceiver
время . Этот отчет должен быть показан пользователю через диалоговое окно, для которого я используюDialogFragment
, как показано ниже.
myReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if(firstTime)
firstTime = false;
boolean anyError = false;
switch (getResultCode()) {
case Activity.RESULT_OK:
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
case SmsManager.RESULT_ERROR_NO_SERVICE:
case SmsManager.RESULT_ERROR_NULL_PDU:
case SmsManager.RESULT_ERROR_RADIO_OFF:
anyError = true;
break;
}
sent.add(anyError);
CustomAlertDialogFragment customAlertDialogFragment = CustomAlertDialogFragment.newInstance("Title",logMessage);
customAlertDialogFragment.show(getActivity().getSupportFragmentManager(),"TAG");
sent.clear();
}
};
Код для CustomDialog
ниже.
public class CustomAlertDialogFragment extends DialogFragment {
public static CustomAlertDialogFragment newInstance(String title, String content) {
CustomAlertDialogFragment customAlertDialogFragment = new CustomAlertDialogFragment();
Bundle args = new Bundle();
args.putString("title",title);
args.putString("content", content);
customAlertDialogFragment.setArguments(args);
return customAlertDialogFragment;
}
@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
String title = getArguments().getString("title");
String content = getArguments().getString("content");
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
// title bar string
builder.setTitle(title);
builder.setPositiveButton(R.string.ok, null);
builder.setMessage(content);
AlertDialog errorDialog = builder.create();
// return the Dialog object
return errorDialog;
}
}
Если пользователь переходит к любому другому Fragment
или Activity
тем временем, диалоговое окно не отображается. Он должен броситьNullPointerException
, если его не получает контекст, но его нет. Какой может быть возможная альтернатива или решение для этого. Я сослался на другие вопросы SO, где участники попросили использовать уведомление вместо этого, но мое требование-диалог. Пожалуйста помочь.
Dialogue
Бросает исключение с именемwindow leaked
I guess. В вашем случае, я думаю, вы можете подумать об использованииApplication
класса.В любом случае, вы можете зарегистрировать
BroadcastReceiver
в своемApplication
классе для вашего случая, который будет получать трансляцию и покажет диалог по требованию.Для повторного запуска
Context
вы можете использоватьgetApplicationContext()
.Чтобы зарегистрировать
Application
класс в манифесте, необходимо определить имя