Можно ли установить различные действия для плавающей кнопки действия в разных фрагментах?


Я работаю или приложение, где у меня есть 4 фрагмента в viewpager и плавающая кнопка действия (fab). Когда я нажимаю на fab, появляются 3 вложенные вкладки. Каждый из них запускает различные действия, в которых пользователь может искать данные из разных фрагментов. Можно ли настроить fab так, что если я нажму на него, пока я нахожусь в первом фрагменте, он откроет действие для поиска внутри этого фрагмента, onClick inside second - поиск второго и т. д. Проблема в том, что теперь нажимаю на sub fab, пока я нахожусь в каком-то фрагменте Я тоже могу искать данные из другого фрагмента, и это немного странно. Я понимаю, что вопрос немного странный, если что-то непонятно, я объясню дальше

2 3

2 ответа:

Вы можете сделать кнопку FAB общедоступной и реализовать прослушиватель onClick в каждом фрагменте. Вы должны переопределить setUserVisibleHint и поместить свой код onResume, чтобы getActivity() не возвращал null. Кнопка Fab будет иметь различные действия в разных фрагментах.

Вот пример, внутри каждого фрагмента, когда вы хотите нажать прослушиватель:

@Override
public void setUserVisibleHint(boolean visible)
{
    super.setUserVisibleHint(visible);
    if (visible && isResumed())
    {            
        onResume();
    }
}

 @Override
public void onResume()
{
    super.onResume();
    if (!getUserVisibleHint())
    {
        return;
    }

    MainActivity mainActivity = (MainActivity)getActivity();
    mainActivity.fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
          //Do what you want
        }
    });
}

Вы можете проверить метод onclick плавающей кнопки действия, фрагмент которой в данный момент открыт, и вызвать его.

Вызовите findFragmentById() на FragmentManager и определите, какой фрагмент находится в вашем контейнере R.id.frameTitle.