实现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
相关产品推荐
相关产品推荐

