[英]Custom listener/interface doesn't works in Android
I'm new on build a custom interface class. 我是新建一个自定义接口类的对象。 In my app, I would to build a custom listener to call a particular method in my MainActivity
. 在我的应用程序中,我将构建一个自定义侦听器以在MainActivity
调用特定方法。 When I execute the code, I receive an error...this is the log: 当我执行代码时,我收到一个错误...这是日志:
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)
This is my code: 这是我的代码:
CustomInterface.java CustomInterface.java
public interface CustomInterface {
public void onUpdateListJob();
}
MyFragment.java MyFragment.java
public class MyFragment extends Fragment {
private CustomInterface listener;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
//...
listener.onUpdateListJob(); // CRASH HERE (Line 217)
//...
}
}
MainActivity.java MainActivity.java
public class MainActivity extends FragmentActivity implements CustomInterface {
//...
@Override
public void onUpdateListJob() {
// do works...
}
}
What Am I doing wrong? 我究竟做错了什么?
listener
has never been assigned. listener
器从未分配。 I don't see listener = [something]
anywhere. 我在任何地方都没有看到listener = [something]
。
listener
is never initialized. listener
器永远不会初始化。 I imagine you attach the Fragment
to your Activity
somewhat like the code below: 我想象您将Fragment
附加到您的Activity
上,就像下面的代码:
FragmentManager fm = getFragmentManager();
FragmentTransaction transaction = fm.beginTransaction();
MyFragment mFragment = new MyFragment();
transaction.add(R.id.container, mFragment);
transaction.commit();
In MyFragment
there is a method you can override: 在MyFragment
,您可以重写一个方法:
public void onAttach(Activity activity) {
this.listener = (CustomInterface) activity;
}
onAttach
is called when, you guessed it, the Fragment
is attached to the Activity
. 当您猜到了Fragment
附加到Activity
时,将调用onAttach
。 But you can also do it with a setter, or set the listener
in the constructor. 但是,您也可以使用setter来执行此操作,或者在构造函数中设置listener
器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.