onBackPressed () во фрагментах - PullRequest
0 голосов
/ 01 октября 2018

У меня есть три фрагмента в одном действии, FragmentTransaction для

Фрагмент A к фрагментам B, Фрагмент B к фрагменту C

работает нормально, но на onBackPressed () это будетпоток как

Фрагмент C к Фрагменту B, Фрагмент B к Фрагменту A,

Но когда onBackPressed () Для Фрагмента A это закроет Фрагмент, я не хочу закрывать Фрагмент A,вот мой код

On OnNavigationItemSelectedListener.

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = new BottomNavigationView.OnNavigationItemSelectedListener() {

    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment fragment;
        switch (item.getItemId()) {
            case R.id.navigation_home:
                fragment = new HomeFragment();
                FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
                transaction.replace(R.id.frame_container, fragment);
                transaction.commit();

                return true;
            case R.id.navigation_my_orders:
                fragment = new MyOrdersFragment();
                loadFragment(fragment);
                return true;
            case R.id.navigation_profile:
                fragment = new ProfileFragment();
                loadFragment(fragment);
              return true;
        }

        return false;
    }
};

Для загрузки фрагмента.

 private void loadFragment(Fragment fragment) {
    // load fragment
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.setCustomAnimations(R.anim.right_enter, R.anim.right_enter);
    transaction.replace(R.id.frame_container, fragment);
    transaction.addToBackStack(null);
    transaction.commit();
}

Как решить, пожалуйста, дайте мне знать.

Ответы [ 2 ]

0 голосов
/ 01 октября 2018

Метод onBackPressed обрабатывается Активом, который содержит ваши фрагменты.

Внутри вашей Активности вам необходимо переопределить метод onBackPressed

@Override
public void onBackPressed() {
     super.onBackPressed();
}

super.onBackPressed удалит ваш фрагмент, который выМожно добавить условие, чтобы не вызывать его, если вы находитесь во FragmentA

 @Override
public void onBackPressed() {
     if (!isFragmentA){
         super.onBackPressed();
     }

}

. У вас есть несколько способов найти фрагмент, который в данный момент отображается на экране.

0 голосов
/ 01 октября 2018

Пожалуйста, добавьте код в вашу деятельность.

   override fun onBackPressed() {
            if (supportFragmentManager.backStackEntryCount > 0)
                supportFragmentManager.popBackStack()
            else {
           }
        }

Для загрузки фрагмента

private void loadFragment(Fragment fragment) {
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.setCustomAnimations(R.anim.right_enter, R.anim.right_enter);
    transaction.add(R.id.frame_container, fragment);
    transaction.addToBackStack(fragment.getClass().toString());
    transaction.commit();
}

Или вы можете использовать следующий код, чтобы получить текущий фрагмент и проверить, является ли он intance of FragemntA илине.

override fun onBackPressed() {
val fragment = supportFragmentManager.findFragmentById(getContainer())
        if(fragment !is FragmentA){
            supportFragmentManager.popBackStack()
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...