1

У меня возникла проблема с закрытием моей активности, когда я пытаюсь отобразить фрагмент. Я пытаюсь, чтобы мое приложение попросило пользователя оценить мое приложение, когда они нажимают кнопку «Назад», чтобы закрыть мое приложение с главного экрана. Предполагается, что он отобразит фрагмент с просьбой оценить его сейчас или позже. Фрагмент появляется около 1 секунды, после чего приложение закрывается, прежде чем пользователь сможет сделать выбор. Как это исправить?Как вы не позволяете кнопке «Назад» закрыть приложение из основного действия?

+0

Извините. Я не мог получить эту первую инструкцию Override для правильной публикации. Это происходит в вашей основной деятельности. –

+0

Спасибо, что поделились, но не могли бы вы 1) очистить форматирование кода и 2) сделать «вопрос» частью этого сообщения актуальным вопросом, а затем предоставить отдельный ответ? –

+0

@medic_ma IMO, вопросы должны находиться в разделе вопросов и ответах в части ответов. Если бы я был вами, я бы поставил вопрос с тем, с чем я столкнулся, и я бы ответил на тот же вопрос с решением, которое я придумал. Вот как работает этот сайт. –

ответ

0

Это решение, которое я придумал:

Я собираюсь показать вам, что я сделал, чтобы осуществить фрагмент и как я предотвращено его от закрытия деятельности в обход фрагмента.

В моей основной деятельности я добавил:

@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(); 
} 

}

Это работало отлично для меня. Надеюсь, это может помочь кому-то.