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

(笔记,备忘)

(原理不懂,能跑就行)

今天在学习Android Studio过程中,添加按钮时遇到问题:

8e8e316bb35741dc8708d7452eee20d5.png

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

02ac716897f54759aec9229ccddc8104.png

大图

问题寻找:我的代码直接把 “处理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);
        }
    }

结束:

14a78f08834c453599bcb3ef108d06ab.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值