(笔记,备忘)
(原理不懂,能跑就行)
今天在学习Android Studio过程中,添加按钮时遇到问题:

错误:MainActivity不是抽象的, 并且未覆盖OnLongClickListener中的抽象方法onLongClick(View)

大图
问题寻找:我的代码直接把 “处理B按钮和C按钮的点击事件”与“处理A按钮的点击事件”放在了定义的点击监听器内:
(就是把if都放在class中的public里去了)
// 自定义点击监听器,用于处理按钮A的点击事件
class MyOnClickListener implements View.OnClickListener {
@Override
public void onClick(View s) {
// 检查是否是按钮A被点击
if (s.getId() == R.id.A) {
// 构建描述字符串并更新UI
String desc = String.format("%s A点了 %s",
DateUtil.getNowTime(), ((Button) s).getText());
tv_result.setText(desc);
// 更新按钮C的样式和状态
C.setBackgroundColor(Color.BLACK);
C.setTextColor(Color.WHITE);
C.setText("已经禁了");
C.setEnabled(false);
}
// 处理按钮B的点击事件
if (s.getId() == R.id.B) {
String desc = String.format("%s B点了 %s",
DateUtil.getNowTime(), ((Button) s).getText());
tv_result.setText(desc);
// 更新按钮C的样式和状态
C.setBackgroundColor(Color.YELLOW);
C.setTextColor(Color.BLACK);
C.setText("又开了");
C.setEnabled(true);
}
// 处理按钮C的点击事件
else if (s.getId() == R.id.fuck) {
String desc = String.format("%s 噢,你点到了 %s",
DateUtil.getNowTime(), ((Button) s).getText());
xxx.setText(desc);
}
}
}
而我看我买的工具书中的代码是将“处理B按钮”拿出来,与“处理A按钮的点击事件”分开,处理A按钮的点击事件”放在了定义的点击监听器内:
(他只让class里放一个public,public里就一个if,多余的if他另外写了一个public然后放进去)
// 定义一个点击监听器,它实现了接口View.OnClickListener
class MyOnClickListener implements View.OnClickListener {
@Override
public void onClick(View v) { // 点击事件的处理方法
String desc = String.format("%s 您点击了按钮:%s",
DateUtil.getNowTime(), ((Button) v).getText());
tv_result.setText(desc); // 设置文本视图的文本内容
}
}
@Override
public void onClick(View v) { // 点击事件的处理方法
if (v.getId() == R.id.btn_click_public) { // 来自按钮btn_click_public
String desc = String.format("%s 您点击了按钮:%s",
DateUtil.getNowTime(), ((Button) v).getText());
tv_result.setText(desc); // 设置文本视图的文本内容
}
}
我的解决方法:把“处理B按钮和C按钮的点击事件”单独拿出来,一起放在另外写的public void onClick(View s) {...}里面,问题解决。
(我的代码修改前后比较)
修改前:
// 自定义点击监听器,用于处理按钮A的点击事件
class MyOnClickListener implements View.OnClickListener {
@Override
public void onClick(View s) {
// 检查是否是按钮A被点击
if (s.getId() == R.id.A) {
// 构建描述字符串并更新UI
String desc = String.format("%s A点了 %s",
DateUtil.getNowTime(), ((Button) s).getText());
tv_result.setText(desc);
// 更新按钮C的样式和状态
C.setBackgroundColor(Color.BLACK);
C.setTextColor(Color.WHITE);
C.setText("已经禁了");
C.setEnabled(false);
}
// 处理按钮B的点击事件
if (s.getId() == R.id.B) {
String desc = String.format("%s B点了 %s",
DateUtil.getNowTime(), ((Button) s).getText());
tv_result.setText(desc);
// 更新按钮C的样式和状态
C.setBackgroundColor(Color.YELLOW);
C.setTextColor(Color.BLACK);
C.setText("又开了");
C.setEnabled(true);
}
// 处理按钮C的点击事件
else if (s.getId() == R.id.fuck) {
String desc = String.format("%s 噢,你点到了 %s",
DateUtil.getNowTime(), ((Button) s).getText());
xxx.setText(desc);
}
}
}
修改后:
// 自定义点击监听器,用于处理按钮A的点击事件
class MyOnClickListener implements View.OnClickListener {
@Override
public void onClick(View s) {
// 检查是否是按钮A被点击
if (s.getId() == R.id.A) {
// 构建描述字符串并更新UI
String desc = String.format("%s A点了 %s",
DateUtil.getNowTime(), ((Button) s).getText());
tv_result.setText(desc);
// 更新按钮C的样式和状态
C.setBackgroundColor(Color.BLACK);
C.setTextColor(Color.WHITE);
C.setText("已经禁了");
C.setEnabled(false);
}
}
}
public void onClick(View s) {
// 处理按钮B的点击事件
if (s.getId() == R.id.B) {
String desc = String.format("%s B点了 %s",
DateUtil.getNowTime(), ((Button) s).getText());
tv_result.setText(desc);
// 更新按钮C的样式和状态
C.setBackgroundColor(Color.YELLOW);
C.setTextColor(Color.BLACK);
C.setText("又开了");
C.setEnabled(true);
}
// 处理按钮C的点击事件
else if (s.getId() == R.id.C) {
String desc = String.format("%s 噢,你点到了 %s",
DateUtil.getNowTime(), ((Button) s).getText());
xxx.setText(desc);
}
}
结束: