我正在尝试在Kotlin文件的OnClickListener
按钮上设置Android
。与Java文件不同,在Java文件中,我可以在类级别声明button变量,并在onCreate
方法中对其进行初始化,并在同时分配ClickListener:
Button inlineButton;
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
inlineButton = findViewById(R.id.btn_inline);
inlineButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new NotificationToast(MainActivity.this, "Inline Button");
}
});
}
仅当我使用以下代码创建按钮的副本时,才能设置事件处理程序:
var inlineButton : Button? = null;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
inlineButton = findViewById(R.id.btn_inline)
val inlineButtonCopy = inlineButton;
if (inlineButtonCopy != null) {
inlineButtonCopy.setOnClickListener({
NotificationToast(this,inlineButtonCopy.text.toString()).Show();
})
}
}
我想知道是否无法仅在顶级创建Button的单个实例,在oncreate中对其进行初始化,以及设置事件处理程序。如果只能创建一个实例,则可以使用该事件来更改同一按钮的属性。这是默认行为还是我错过了什么?
任何澄清都受到赞赏。
答案 0 :(得分:3)
在Kotlin中,您无需描述按钮。您可以直接调用id并设置Listener。它比java容易。只是不要对自己的ID感到困惑
btn_inline.setOnClickListener({
NotificationToast(this,inlineButtonCopy.text.toString()).Show();
})
答案 1 :(得分:2)
在 Kotlin 中,您不需要定义XML组件的Id's
。
您可以借助XML中已定义的Id's
直接访问。
让我们假设您在XML中定义的Button
ID为btn_inline
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
btn_inline.setOnClickListener({
NotificationToast(this,inlineButtonCopy.text.toString()).Show();
})
}
此外,请确保在import
部分中出现类似的内容。
import kotlinx.android.synthetic.main.activity_main.*
最后检查一下。
答案 2 :(得分:0)
另一种选择是使用 Late-Initialized Property :
private lateinit var inlineButton: Button
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
inlineButton = findViewById<Button>(R.id.btn_inline)
inlineButton.setOnClickListener {
NotificationToast(this,inlineButtonCopy.text.toString()).Show();
}
}