В моем фрагменте у меня есть строка поиска с меню бургера.Когда последний щелкается, ящик навигации должен быть открыт.Но это определено в упражнении.
Чтобы получить доступ к ящику занятия из моего фрагмента:
Я создал интерфейс, содержащий метод clickOnBurgerMenu
В моей деятельности я реализовал этот интерфейс с помощью метода, который открывает его ящик
В моей деятельности я реализовал метод onAttachFragment
издесь я называю метод фрагмента setUpMaterialSearchBar
В моем фрагменте: в методе setUpMaterialSearchBar(final ClickOnBurgerMenu activity)
: я вызываю activity.clickOnBurgerMenu();
Нопроблема в том, что в методе фрагмента setUpMaterialSearchBar
вызов activity.clickOnBurgerMenu();
выполняется в наборе слушателей на панели поиска.Последний определяется в методе onCreateView
этого фрагмента.
Таким образом, когда фрагмент прикреплен, действие выполняет свой метод setUpMaterialSearchBar
, чтобы установить слушателя в ящик действия, но поиск материалаСтрока не существует в настоящее время: слушатель установлен на ссылку null
и выбрасывается NullPointerException
.Другими словами, более конкретно: material_search_bar
определяется только в onCreateView
, вызывается после onAttachFragment
действия - вот в чем проблема.
Как я мог решить эту проблему?
Источники
Интерфейс
public interface ClickOnMaterialSearchBarBurgerMenu {
void clickOnMaterialSearchBarBurgerMenu();
}
Операция (реализующая этот интерфейс)
@Override
public void onAttachFragment(Fragment fragment) {
if (fragment instanceof HomeFragment) {
HomeFragment home_fragment = (HomeFragment) fragment;
home_fragment.setUpMaterialSearchBar(this);
}
}
@Override
public void clickOnMaterialSearchBarBurgerMenu() {
drawer_layout.openDrawer(Gravity.START);
}
Фрагмент (например, material_search_bar
определен только в onCreateView
, вызывается после onAttachFragment
задания - вот в чем проблема)
public void setUpMaterialSearchBar(final ClickOnMaterialSearchBarBurgerMenu activity) {
material_search_bar.setOnSearchActionListener(new SimpleOnSearchActionListener() {
@Override
public void onButtonClicked(int buttonCode) {
switch (buttonCode){
case MaterialSearchBar.BUTTON_NAVIGATION:
activity.clickOnMaterialSearchBarBurgerMenu();
break;
case MaterialSearchBar.BUTTON_BACK:
etc. etc. etc.