我有一个片段&我有以下代码:
NavDrawer listener;
public interface NavDrawer {
void showNavDrawer(String msg);
}
我为我的片段设置了导航图标。单击图标时,我只称为接口方法。
toolbar.setNavigationIcon(android.R.drawable.ic_menu_directions);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
listener.showNavDrawer("Show Drawer");
}
});
在MainActivity.class
中,我实现了界面来打开导航抽屉。
@Override
public void showNavDrawer(String msg) {
drawer.openDrawer(GravityCompat.START);
}
显示的错误是:
java.lang.NullPointerException:尝试调用接口方法
在发布此主题之前,我通过查看并在现有问题中尝试了解决方案来展示了一些努力。但是,到目前为止还无法解决。
答案 0 :(得分:2)
覆盖你的framgent
中的onAttach
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
listener= (NavDrawer) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement NavDrawer");
}
}
并且还在listener.showNavDrawer(“Show Drawer”)之前检查侦听器是否为null;
注意: onAttach(activity)已弃用,您将拥有一个上下文,您可以使用它。您可以检查上下文是否是活动的实例。
只要MainActivity正在实现接口,上述内容就会起作用。
http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity)
更多信息fragmet communication @ http://developer.android.com/training/basics/fragments/communicating.html
答案 1 :(得分:0)
由于您的侦听器为null,因此请在MainActivity中初始化它。
public class MainActivity extends AppCompatActivity implements NavDrawer{
private NavDrawer listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
.....
listener= new NavDrawer(this);
}
}