【问题标题】:Listener doesn't work..It seems the Listener is 0侦听器不起作用..似乎侦听器为 0
【发布时间】:2017-09-27 01:01:45
【问题描述】:

大家好,我有这个作为 MainActivity:

public class LoginActivity extends AppCompatActivity {
    public interface LoginListener {
        public void onLoginSuccess();
    }

    public void onLoginSuccess() {
        //logged in and do a few other things
    }
}

这是我的第二个 Activity,我想在 MainActivity 中调用 onLoginSuccess() 方法,如您所见,我正在使用 Listener 执行此操作...

public class FingerprintHandler extends FingerprintManager.AuthenticationCallback {

    private LoginActivity.LoginListener mListener;

    public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
        if (mListener != null) {
            mListener.onLoginSuccess();
        }
        else{
            Toast.makeText((Activity)context, "Listener is 0", Toast.LENGTH_LONG).show();
        }
    }
}

我的问题是我每次尝试都会返回:“Listener is 0” from my Toast...所以怎么了?

【问题讨论】:

  • 你在哪里设置mListener?您应该将其设置为LoginActivity 的实例。例如,从登录活动中,喜欢:new FingerprintHandler(this),该构造函数采用LoginListener。另外,单独定义LoginListener,使其为LoginActivity implements LoginListener
  • 抱歉,它应该是什么样子? :)
  • @Jameson 我也不能用 LoginActivity 实现 LoginListener...我在这个 Activity 中有其他东西..当我这样做时,我得到 86 个错误...
  • @Jameson 有没有办法在没有 LoginActivity 实现 LoginListener 的情况下做到这一点? :)
  • 其实你的 LoginActivity 没有实现 LoginListener。您在 LoginActivity 中定义了接口 LoginListener。而不仅仅是创建一个与您的界面同名的方法。你为什么这样做?

标签: java android listener


【解决方案1】:

我上面评论的扩展:

您需要以某种方式注册mListener。这样做的模式是:

public class MyHandler {

    private LoginListener mListener;

    public MyHandler(LoginListener listener) {
        mListener = listener;
    }

    // ... etc...
}

LoginListener 在哪里:

public interface LoginListener {
    public void onLoginSuccess();
}

你的活动有:

public MyActivity implements LoginListener {

    // instantiate the handler somewhere, with a reference
    // to "this". "this" refers to the LoginListener interface
    // which is implemented.
    @Override
    public void onCreate(Bundle b) {
        mHandler = new MyHandler(this);
    }

    @Override
    public void onLoginSuccess() {
        Log.i(TAG, "Kewel beanZ");
    }
}

或者,您可以根据需要将LoginListener 定义为活动内部的接口,并将其实例化为:

public LoginListener mListener = new LoginListener() {
    @Override
    public void onLoginSuccess() {
        Log.i(TAG, "Sweet sweet baby beanz");
    }
};

当你创建MyHandler 时,不要使用this,而是使用mListener

【讨论】:

    【解决方案2】:

    检查以下代码以在 Android 中进行指纹身份验证

    https://gist.github.com/Evin1-/6aca8421903acca0e927eaefd85bd617

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多