Pre-Honeycomb(Android 3),每个Activity都已注册,可通过onClickLayout的XML中的标签处理按钮点击:
android:onClick="myClickMethod"
Run Code Online (Sandbox Code Playgroud)
在该方法中,您可以使用view.getId()和switch语句来执行按钮逻辑.
随着Honeycomb的推出,我将这些活动分解为碎片,可以在许多不同的活动中重复使用.按钮的大部分行为都是与Activity无关的,我希望代码驻留在Fragments文件中,而不使用OnClickListener为每个按钮注册的旧(pre 1.6)方法.
final Button button = (Button) findViewById(R.id.button_id);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
Run Code Online (Sandbox Code Playgroud)
问题是,当我的布局被夸大时,它仍然是接收按钮点击的托管活动,而不是单个碎片.对两者都有好的方法
从我读过,您可以通过onClick两种方式为按钮分配处理程序.
使用android:onClickXML属性,您只需使用带有签名的公共方法的名称,void name(View v)或使用setOnClickListener传递实现OnClickListener接口的对象的方法.后者通常需要一个我个人不喜欢的匿名课程(个人品味)或者定义实现该课程的内部课程OnClickListener.
通过使用XML属性,您只需要定义一个方法而不是一个类,所以我想知道是否可以通过代码而不是XML布局来完成相同的操作.
我总是onclick()在大多数项目中使用事件.但是,我读到了OnClickListener().谁能说出这两者之间有什么区别?哪一个最适合在Android应用程序中使用?
我试图在 Fragment 类中接收复选框选择,但是我无法使用在 Activity 中使用的方式(android:onClick="onCheckboxClicked"从 a 调用方法layout.xml),因为每次使用此方法时我都会收到“method onCheckboxClicked not found”叫。
public void onCheckboxClicked(View view) {
// Is the view now checked?
boolean checked = ((CheckBox) view).isChecked();
// Check which checkbox was clicked
switch(view.getId()) {
case (R.id.checkBox_wifi):
if (checked) {
editor.putBoolean("wifi_on_off", true);
}
else {
editor.putBoolean("wifi_on_off", false);
}
break;
}
editor.apply();
}
Run Code Online (Sandbox Code Playgroud)
所以,我已经实现了 View.OnClickListener,但这没有得到任何复选框检查/取消选中:
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.checkBox_wifi:
boolean checked = ((CheckBox) view).isChecked();
if (checked) {
editor.putBoolean("wifi_on_off", true);
} else …Run Code Online (Sandbox Code Playgroud)