Android 活动访问片段';s onCreateView';在片段中的s小部件:NullPointerException
在我的片段中,我有一个带有汉堡菜单的搜索栏。单击后者时,必须打开导航抽屉。但它是在活动中定义的 要从我的片段访问活动的抽屉,请执行以下操作:Android 活动访问片段';s onCreateView';在片段中的s小部件:NullPointerException,android,android-fragments,Android,Android Fragments,在我的片段中,我有一个带有汉堡菜单的搜索栏。单击后者时,必须打开导航抽屉。但它是在活动中定义的 要从我的片段访问活动的抽屉,请执行以下操作: 我已经创建了一个包含方法clickOnBurgerMenu 在我的活动中,我用一个打开抽屉的方法实现了这个接口 在我的活动中,我实现了方法onAttachFragment,这里我调用了片段的方法setUpMaterialSearchBar 在我的片段中:在方法setUpMaterialSearchBar(final ClickOnBurgerMenu活动)
clickOnBurgerMenu
onAttachFragment
,这里我调用了片段的方法setUpMaterialSearchBar
setUpMaterialSearchBar(final ClickOnBurgerMenu活动)
中:我调用activity.ClickOnBurgerMenu()代码>
setUpMaterialSearchBar
中,调用activity.clickOnBurgerMenu()代码>在搜索栏上的侦听器集中执行。后者在该片段的方法onCreateView
中定义
因此,当附加片段时,活动执行其setUpMaterialSearchBar
方法,以便使用活动的抽屉设置侦听器,但此时不存在材质搜索栏:侦听器设置在null
引用上,并引发NullPointerException
。换句话说,更具体地说:material\u search\u bar
仅在onCreateView
中定义,在活动的片段之后调用-这就是问题所在
我怎样才能解决这个问题
来源
接口
活动(实现此接口)
片段(material\u search\u bar
仅在onCreateView
中定义,在活动的片段之后调用-这就是问题所在)
为了解开你的逻辑,你可以引入
私有SimpleOnSearchActionListener sosActionListener代码>在HomeFragment
中
更改设置材料搜索栏()
,如下所示:
public void setUpMaterialSearchBar(final ClickOnMaterialSearchBarBurgerMenu activity) {
sosActionListener = new SimpleOnSearchActionListener() {
@Override
public void onButtonClicked(int buttonCode) {
switch (buttonCode){
case MaterialSearchBar.BUTTON_NAVIGATION:
activity.clickOnMaterialSearchBarBurgerMenu();
break;
case MaterialSearchBar.BUTTON_BACK:
// etc. etc. etc.
}
}
};
if (material_search_bar != null){
material_search_bar.setOnSearchActionListener(sosActionListener);
}
}
并通过在初始化物料搜索栏后添加以下行来修改onCreateView()
“if(material_search_bar!=null){material_search_bar.setOnSearchActionListener(sosActionListener);}”行是否真的有用且必要?@JarsOfJam-这取决于您希望在何种情况下调用该方法。在你的问题所涉及的情况下,你可以省略这些行,但保留它们不会有什么坏处。如果以后(在onCreateView()运行之后)要使用相同的方法,它们很重要
@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);
}
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.
public void setUpMaterialSearchBar(final ClickOnMaterialSearchBarBurgerMenu activity) {
sosActionListener = new SimpleOnSearchActionListener() {
@Override
public void onButtonClicked(int buttonCode) {
switch (buttonCode){
case MaterialSearchBar.BUTTON_NAVIGATION:
activity.clickOnMaterialSearchBarBurgerMenu();
break;
case MaterialSearchBar.BUTTON_BACK:
// etc. etc. etc.
}
}
};
if (material_search_bar != null){
material_search_bar.setOnSearchActionListener(sosActionListener);
}
}
material_search_bar.setOnSearchActionListener(sosActionListener);