gpt4 book ai didi

java - Android自定义点击监听器内联与字段减速为什么

转载 作者:太空宇宙 更新时间:2023-11-04 12:05:02 25 4
gpt4 key购买 nike

如果我在方法减速中设置自定义点击监听器,它就会起作用。但如果我将自定义点击监听器定义为私有(private)字段并设置它,它就不起作用。为什么?

public class CustomView {

private View mView;
private Button mButton;

public CustomView() {
mButton = new Button();
mView = new View();
// this works
mView.setOnClickListener(new CustomClickListener() {
@Override
public void onClick() {
mButton.setText("xyz");
}
});

// this doesn't work as in nothing happens.
mView.setOnClickListener(mCustomListener);
}

private CustomClickListener mCustomListener = new CustomClickListener() {
@Override
public void onClick() {
mButton.setText("xyz");
}
};
}

最佳答案

你的问题是事情发生的顺序。将会发生的是:

首先,您的构造函数开始运行,基本上是进行 super 调用。

然后您的所有字段都已初始化,因此为 mButton 分配值之前,mCustomListener 已初始化!

解决此问题的一种方法:

private final mButton = new Button();
private final mCustomerListener = ...

然后在你的ctor中,只需执行

mView.setOnClickListener(mCustomListener);

所以,换句话说:您的代码的问题在于,mCustomListenerfield init 在您初始化 mButton 之前运行。

参见here有关“订单”的更多详细信息。

(提示:我建议将任何字段最终,只是因为这是一个很好的做法。仅允许稍后更改字段......当有充分的理由这样做时;否则,请将您的内容保留为最终的)。

关于java - Android自定义点击监听器内联与字段减速为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40461685/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com