NPE:尝试调用接口方法
NPE : Attempt to invoke interface method
我有一个片段并且我有以下代码:
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: Attempt to invoke interface method
在我 post 这个线程之前,我通过查看和尝试了现有问题中的解决方案来展示了一些努力。但是,至今没能解决。
在您的 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");
之前检查监听器是否为空
注意:
onAttach(activity) 已弃用,您将拥有一个上下文,您可以使用它。您可以检查上下文是否是 activity.
的实例
只要 MainActivity 正在实现接口,上面的方法也可以工作。
http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity)
更多信息片段交流@http://developer.android.com/training/basics/fragments/communicating.html
由于您的侦听器为空,因此在 MainActivity 中对其进行初始化。
public class MainActivity extends AppCompatActivity implements NavDrawer{
private NavDrawer listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
.....
listener= new NavDrawer(this);
}
}
我有一个片段并且我有以下代码:
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: Attempt to invoke interface method
在我 post 这个线程之前,我通过查看和尝试了现有问题中的解决方案来展示了一些努力。但是,至今没能解决。
在您的 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");
之前检查监听器是否为空注意: onAttach(activity) 已弃用,您将拥有一个上下文,您可以使用它。您可以检查上下文是否是 activity.
的实例只要 MainActivity 正在实现接口,上面的方法也可以工作。
http://developer.android.com/reference/android/app/Fragment.html#onAttach(android.app.Activity)
更多信息片段交流@http://developer.android.com/training/basics/fragments/communicating.html
由于您的侦听器为空,因此在 MainActivity 中对其进行初始化。
public class MainActivity extends AppCompatActivity implements NavDrawer{
private NavDrawer listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
.....
listener= new NavDrawer(this);
}
}