简体   繁体   English

自定义监听器/界面在Android中不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM