У меня возникла проблема с закрытием моей активности, когда я пытаюсь отобразить фрагмент. Я пытаюсь, чтобы мое приложение попросило пользователя оценить мое приложение, когда они нажимают кнопку «Назад», чтобы закрыть мое приложение с главного экрана. Предполагается, что он отобразит фрагмент с просьбой оценить его сейчас или позже. Фрагмент появляется около 1 секунды, после чего приложение закрывается, прежде чем пользователь сможет сделать выбор. Как это исправить?Как вы не позволяете кнопке «Назад» закрыть приложение из основного действия?
ответ
Это решение, которое я придумал:
Я собираюсь показать вам, что я сделал, чтобы осуществить фрагмент и как я предотвращено его от закрытия деятельности в обход фрагмента.
В моей основной деятельности я добавил:
@Override
public void onBackPressed() {
final DialogFragment rate = new RateMe();
rate.show(getSupportFragmentManager(), "Rate");
}
Не забудьте удалить супер заявление от Override, чтобы остановить кнопочный от Закрывая ЗАЯВКУ полностью, когда кнопка нажата назад.
Я создал операцию чистого фрагмента с помощью xml под названием «RateMe». Я оставил xml пустой после удаления «Hllo World», но не забудьте дважды проверить свои инструменты: context =. Это была ошибка, которую я сделал, и это не соответствовало моему пакету. Простое исправление. Просто измените его на название своего пакета.
Тогда в фрагменте я поставил:
public class RateMe extends DialogFragment {
public static RateMe newInstance(int title) {
RateMe frag = new RateMe();
Bundle args = new Bundle();
// args.putInt("title", title);
frag.setArguments(args);
return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setCancelable(false);
builder.setTitle("Rate Me");
builder.setMessage(R.string.Rate);
// Создать строку в вашем Резе ЗНАЧЕНИЕ strings.xml файл. Это будет ваш //R.string, который появляется на вашем фрагменте ^^^^ Затем продолжайте, добавив ......
builder.setPositiveButton("Yes, I Will", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Uri uri = Uri.pa(RateMe.this);rse("market://details?id=****PUT YOUR GOOGLE PLAY URL INFO HERE");
Intent myAppLinkToMarket = new Intent(Intent.ACTION_VIEW, uri);
myAppLinkToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
try {
startActivity(myAppLinkToMarket);
} catch (ActivityNotFoundException e) {
Toast.makeText(getContext(), " unable to find market app", Toast.LENGTH_LONG).show();
}
}
});
builder.setNegativeButton("Not Now", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
System.exit(0); //this will close the application
}
});
return builder.create();
}
}
Это работало отлично для меня. Надеюсь, это может помочь кому-то.
Извините. Я не мог получить эту первую инструкцию Override для правильной публикации. Это происходит в вашей основной деятельности. –
Спасибо, что поделились, но не могли бы вы 1) очистить форматирование кода и 2) сделать «вопрос» частью этого сообщения актуальным вопросом, а затем предоставить отдельный ответ? –
@medic_ma IMO, вопросы должны находиться в разделе вопросов и ответах в части ответов. Если бы я был вами, я бы поставил вопрос с тем, с чем я столкнулся, и я бы ответил на тот же вопрос с решением, которое я придумал. Вот как работает этот сайт. –