У меня есть код, который добавляет фрагмент в событие щелчка. Это работает, и после этого кнопка удаляется с дисплея, но я хочу, чтобы кнопка появлялась, когда пользователь нажимает назад и оставляет фрагмент. Что-то вроде onBackStackUsed.

Я пытался найти что-то подобное, но не могу найти способ сделать это. Это вообще возможно?

final FloatingActionButton floatingActionButton = (FloatingActionButton)findViewById(R.id.live_support);
floatingActionButton.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        getFragmentManager()
            .beginTransaction()
            .replace(R.id.live_support_frame, ChatWindowFragment.newInstance("XXX", "1"), "chat_fragment")
            .addToBackStack("chat_fragment")
            .commit();


        getFragmentManager().addOnBackStackChangedListener(
            new FragmentManager.OnBackStackChangedListener() {
                @Override
                public void onBackStackChanged() {
                    floatingActionButton.setVisibility(View.INVISIBLE);
                }
            }
        );

    }
});
0
Jesper 8 Сен 2016 в 15:08

4 ответа

Лучший ответ

Замените onBackPressed внутри действия следующим образом:

@Override
public void onBackPressed() {
    Fragment frag = getSupportFragmentManager().findFragmentByTag("fragment");
    if(frag instanceOf SearchFragment && frag.getTag().equals("chat_fragment")) {
       floatingActionButton.setVisibility(View.INVISIBLE); // or visible
     } else {
        super.onBackPressed();
    }
}
0
Aman Grover 8 Сен 2016 в 12:39
getFragmentManager().addOnBackStackChangedListener(
    new FragmentManager.OnBackStackChangedListener() {
        @Override
        public void onBackStackChanged() {
            int count = getFragmentManager().getBackStackEntryCount();

            if (count == 0) {
                floatingActionButton.show();
            } else {
                floatingActionButton.hide();
            }
        }
    }
);

OnBackStachChanged вызывается как при добавлении, так и при стеке или удалении.
Так что я просто проверяю, есть ли он уже или нет.

0
Jesper 8 Сен 2016 в 12:44

Переопределите метод onBackPress () в Activity и управляйте им, как показано ниже:

@Override
public void onBackPressed() {
    Fragment myFragment = getSupportFragmentManager().findFragmentByTag("fragment");
    if (myFragment instanceof SearchFragment && myFragment.isVisible()) {
       //do what you want here
    }
}

Удачного кодирования :)

0
Anand Savjani 8 Сен 2016 в 12:12

Я думаю, что вы хотите реализовать onBackPressed в своей деятельности. Вот несколько способов сделать это Как реализовать onBackPressed () во фрагментах?

1
Community 23 Май 2017 в 12:22