Добавить действие на фрагмент перед выходом из приложения - PullRequest
0 голосов
/ 12 ноября 2018

У меня небольшая проблема с кодированием.

Моя цель: у меня есть 2 фрагмента [0] и [1].Мой фрагмент по умолчанию - [0].На [1] я нажимаю клавишу возврата и возвращаюсь к фрагменту [0] (вместо закрытия приложения).

Вот код, который работает правильно,

, зная, чтофрагмент [1] уже находится в стеке:

getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new FragmentUn().addToBackStack(null).commit();

, а вот код на backPressed:

@Override
public void onBackPressed() {
    if (drawer.isDrawerOpen(GravityCompat.START)) {
        drawer.closeDrawer(GravityCompat.START);

    } else if (getFragmentManager().getBackStackEntryCount() > 0){
            getFragmentManager().popBackStack();
    } else {
        super.onBackPressed();
    }

}

Этот код работает очень хорошо, но я хочу сделать этодобавить действие (popUp) один раз для получения фрагмента [0], который спрашивает пользователя, хочет ли он покинуть приложение или нет, когда кто-то нажимает клавишу возврата (здесь приложение просто закрывается)

Для этого, Я написал:

@Override
    public void onBackPressed() {
        if (drawer.isDrawerOpen(GravityCompat.START)) {
            drawer.closeDrawer(GravityCompat.START);

        } else if (getFragmentManager().getBackStackEntryCount() > 0){
            getFragmentManager().popBackStack();
        } else {
            AlertDialog.Builder exitPopUp = new AlertDialog.Builder(this);
            exitPopUp.setTitle("Exit");
            exitPopUp.setMessage("Voulez-vous quitter L'App ?");
            exitPopUp.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    finish();
                }
            });
            exitPopUp.setNegativeButton("Non", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {

                }
            });
            exitPopUp.setNeutralButton("Noter", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    Uri uri = Uri.parse("market://details?id=" + getApplicationContext().getPackageName());
                    Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
                    // To count with Play market backstack, After pressing back button,
                    // to taken back to our application, we need to add following flags to intent.
                    goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                            Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
                            Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
                    try {
                        startActivity(goToMarket);
                    } catch (ActivityNotFoundException e) {
                        startActivity(new Intent(Intent.ACTION_VIEW,
                                Uri.parse("http://play.google.com/store/apps/details?id=" + getApplicationContext().getPackageName())));
                    }
                }
            });

            exitPopUp.show();
        }
}

Result ==> Приложение сразу отображает всплывающее окно, когда вы нажимаете return для любого фрагмента [0] или [1].За исключением того, что я хочу, чтобы только прибыть на фрагмент [0], что отображается всплывающее окно.[1] - клавиша возврата -> [0] - клавиша возврата -> всплывающее окно выхода.

Итак, что я должен сделать, чтобы он работал правильно?Заранее спасибо:)

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Самое простое, что нужно сделать, это установить для int значение 0 (ИЛИ любой флаг, который дает вам знать, что вы находитесь на первом фрагменте) примерно так:

    //do this for your first fragment
    Fragment fragment = MainFragment.newInstance();
    FragmentTransaction transaction = 
    getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.layout_container, fragment, "main").commit();
    mCurrentFrag = 0;

    // and this for others
    Fragment fragment = MainFragment.newInstance();
    FragmentTransaction transaction = 
    getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.layout_container, fragment, "main").commit();
    mCurrentFrag = 1;

, затем выполните следующее

@Override
public void onBackPressed() {
    if (mCurrentFrag == MAIN_FRAG){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                AlertDialog.Builder exitPopUp = new AlertDialog.Builder(MainActivity.this);
                exitPopUp.setTitle("Exit");
                exitPopUp.setMessage("Are you sure you want to exit?");
                exitPopUp.setPositiveButton("Oui", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        finish();
                    }
                });
                exitPopUp.setNegativeButton("Non", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {

                    }
                });
                exitPopUp.setNeutralButton("Noter", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Uri uri = Uri.parse("market://details?id=" + getApplicationContext().getPackageName());
                        Intent goToMarket = new Intent(Intent.ACTION_VIEW, uri);
                        goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY |
                                Intent.FLAG_ACTIVITY_NEW_DOCUMENT |
                                Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
                        try {
                            startActivity(goToMarket);
                        } catch (ActivityNotFoundException e) {
                            startActivity(new Intent(Intent.ACTION_VIEW,
                                    Uri.parse("http://play.google.com/store/apps/details?id=" + getApplicationContext().getPackageName())));
                        }
                    }
                });

                exitPopUp.show();
            }
        });
    }else{
        super.onBackPressed();
    }
}
0 голосов
/ 12 ноября 2018
    @Override
        public void onBackPressed() {
            super.onBackPressed();
            MainFragment main = (MainFragment) getSupportFragmentManager().findFragmentByTag("main");
            if (main != null && main.isVisible()) {
                if (mExitCheck < 1) {
                    Toast.makeText(this, "Press back again to exit", Toast.LENGTH_SHORT).show();
                } else {
                    //mExitCheck = 0 is an int
                    mExitCheck = 0;

                    //Finish() to exit the app
                    finish();
                }
                mExitCheck++;
            } else {
                showMain();
            }
        }
...