Android触摸操作下如何关闭一个Activity

4

如何在Android上通过触摸结束一个Activity。这里我展示了一个在details.xml中详细描述的视图。我需要在触摸时关闭该Activity。我尝试了以下代码,但它并没有起作用。有什么想法吗?

public class Details extends Activity {
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.details);
    }
    public boolean onTouchEvent(MotionEvent event){
        this.finish();
        return true;
    }       
}

你确定 onTouchEvent 被调用了吗?API 文档提到,只有在所有子视图都没有消耗事件的情况下,才会被调用。 - mmeyer
我认为它没有被调用。你有什么想法如何将“onTouchEvent”添加到我正在使用的视图中吗?因为这里我是从XML中使用它的。 - dinesh707
4个回答

6
你应该使用 标签。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    finish();
    return super.dispatchTouchEvent(ev);
}

0
  1. 只有在视图层次结构中没有其他视图消耗事件时,才会调用您的onTouchEvent()。这是不常见的,因为许多视图确实与触摸事件交互。

  2. 在onTouchEvent()中进行操作而不查看实际事件是错误的。

  3. 通常,您应该实现一个响应触摸并执行适当操作的视图。


你能检查一下这个链接吗:http://stackoverflow.com/questions/5628687/problem-in-android-creating-a-view-dynamically - dinesh707

0

我知道这是一个老问题,但我的解决方案是:如果有人需要,可以尝试以下方法:

我遇到了同样的问题,所以我给我的父布局(即constraintLayout)设置了一个id,然后在setOnClickListener()方法中调用finish(),这样就解决了。

View v = findViewById(R.id.validateLayout);

    v.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            finish();
        }
    });

validateLayout 是我的活动的父约束布局。

欢迎任何评论。

我还想知道 Addev 的建议是否比这段代码更好。


-1

你在onCreate()方法中没有安装监听器。像这样: findViewById(R.id.some_view).setOnTouchListener(this);


他不需要一个。他正在尝试使屏幕本身被触摸时关闭活动。 - uyuyuy99

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接