You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

实现View.OnTouchListener遇两类报错:Unexpected Token与Intent构造器无法解析

问题排查与修复方案

错误1:Unexpected Token(意外标记)

原因:代码存在多处语法结构不完整:

  • switch 语句未添加闭合大括号 }
  • onTouch 方法未添加闭合大括号 }
  • View.OnTouchListener 匿名内部类未添加闭合大括号 }

错误2:无法解析构造器Intent(anonymous android.view.View.OnTouchListener, java.lang.Class<com.krish.galaxypdfviewer.Website>)

原因:若在OnTouchListener匿名内部类中直接使用this,该this指向的是匿名内部类实例,而非外部的Activity实例(Intent构造器第一个参数需要Context类型,Activity是Context的子类)。需明确指定外部Activity的实例,格式为你的Activity类名.this(例如MainActivity.this)。


修复后的完整代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    FloatingActionButton actionButton = findViewById(R.id.action_button);

    defineView();
    handleIntent();
    defineActionBar();
    checkPermission();

    long start;
    actionButton.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(final View v, final MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                    start = System.currentTimeMillis();
                    return true;
                case MotionEvent.ACTION_UP:
                    if (System.currentTimeMillis() - start < 500) { // 点击时长小于500ms,后续可调整该值
                        // 在这里处理短点击逻辑
                    } else {
                        openWebsite(); // 处理长点击逻辑
                    }
                    return true;
                default:
                    return false;
            }
        }
    });
}

public void openWebsite() {
    // 此处this指代当前Activity实例,若需在匿名类内直接创建Intent,需替换为MainActivity.this(你的Activity类名)
    Intent intent = new Intent(this, Website.class);
    startActivity(intent);
}

内容的提问来源于stack exchange,提问作者Xtra 514

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 17:09:47