Dialog 右滑退出 还在原先的Activity界面,怎么解决
时间: 2024-03-16 19:46:09 浏览: 76
右滑退出当前Activity
5星 · 资源好评率100%
要实现 Dialog 右滑退出后直接返回到上一个 Activity 界面,可以在 Dialog 的代码中重写 onTouchEvent 方法,在用户向右滑动时判断是否达到一定的距离,如果达到则调用 dismiss() 方法关闭 Dialog,并且在 dismiss() 方法中添加 setResult() 方法将结果返回给上一个 Activity。上一个 Activity 可以在 onActivityResult() 方法中接收到结果,并且根据结果判断是否需要进行相应的操作。具体代码实现可以参考以下示例:
在 Dialog 类中添加以下代码:
```
private float startX;
private float startY;
private float endX;
private float endY;
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startX = event.getX();
startY = event.getY();
break;
case MotionEvent.ACTION_UP:
endX = event.getX();
endY = event.getY();
float distanceX = Math.abs(startX - endX);
float distanceY = Math.abs(startY - endY);
if (distanceX > distanceY && distanceX > 200) { // 判断是否向右滑动,并且滑动距离是否大于200
setResult(RESULT_OK);
dismiss();
}
break;
}
return true;
}
@Override
public void dismiss() {
super.dismiss();
if (getContext() instanceof Activity) {
((Activity) getContext()).setResult(RESULT_OK);
}
}
```
在上一个 Activity 中调用 Dialog 的 startActivityForResult() 方法,并且在 onActivityResult() 方法中判断返回结果:
```
private static final int REQUEST_CODE_DIALOG = 1;
private void showDialog() {
MyDialog dialog = new MyDialog(this);
dialog.show();
startActivityForResult(dialog, REQUEST_CODE_DIALOG);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_DIALOG && resultCode == RESULT_OK) {
// 执行相应操作
}
}
```
阅读全文