我是构建自定义接口类的新手。
在我的应用程序中,我将构建一个自定义侦听器来调用MainActivity
中的特定方法。
当我执行代码时,我收到一个错误......这是日志:
java.lang.NullPointerException: Attempt to invoke interface method 'void com.robertot.timereport.inteface.CustomInterface.onUpdateListJob()' on a null object reference
at com.robertot.timereport.pages.MyFragment$3.onClick(NewJobFragment.java:217)
at android.view.View.performClick(View.java:4445)
at android.view.View$PerformClick.run(View.java:18446)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5144)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:611)
这是我的代码:
CustomInterface.java
public interface CustomInterface {
public void onUpdateListJob();
}
MyFragment.java
public class MyFragment extends Fragment {
private CustomInterface listener;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
//...
listener.onUpdateListJob(); // CRASH HERE (Line 217)
//...
}
}
MainActivity.java
public class MainActivity extends FragmentActivity implements CustomInterface {
//...
@Override
public void onUpdateListJob() {
// do works...
}
}
我做错了什么?
答案 0 :(得分:3)
listener
从未被分配过。我在任何地方都看不到listener = [something]
。
答案 1 :(得分:1)
listener
永远不会被初始化。我想你会将Fragment
附加到Activity
,有点像下面的代码:
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
MyFragment mFragment = new MyFragment();
transaction.add(R.id.container, mFragment);
transaction.commit();
在MyFragment
中,您可以覆盖一种方法:
public void onAttach(Activity activity) {
this.listener = (CustomInterface) activity;
}
当您猜到onAttach
附加到Fragment
时,会调用 Activity
。但您也可以使用setter执行此操作,或在构造函数中设置listener
。