【问题标题】:finish() takes me to main activityfinish() 带我进入主要活动
【发布时间】:2013-08-04 21:13:39
【问题描述】:

我有一个包含 3 个活动的简单视频播放器。在我上次的活动中

player.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() != KeyEvent.ACTION_DOWN)
                return false;

//

            case KeyEvent.KEYCODE_MEDIA_STOP:
                    finish();
                    return true;

当我按下停止时,这正是我想要它做的事情:将我带到上一个活动

但是..

player.setOnErrorListener(new MediaPlayer.OnErrorListener() {
        @Override
        public boolean onError(MediaPlayer mediaPlayer, int i, int i2) {
            player.setVisibility(View.GONE);
            buffering.setVisibility(View.GONE);
            errorDialog.setVisibility(View.VISIBLE);
            return true;  
        }
    });

errorDialog 有一个小按钮(由我制作),当您按下它时调用 finish() 将我带回到主要活动(第一个)而不是前一个(第二个),我不明白为什么。 Activity 中的一个新方法,其中包含 finish(),但仍然做同样的事情。 感谢您的时间和支持。

【问题讨论】:

  • 对话框中调用finish()的代码在哪里?
  • “对话框”是我制作的自定义按钮:
  • 请编辑您的原始问题以包含格式化的 XML。此外,通常应将android:onClick 设置为 编写的函数的名称,以便您可以完全控制发生的情况。在这种情况下,finish() 可能不会做你想让它做的事情。

标签: android activity-finish


【解决方案1】:

您对finish() 的呼叫正在结束您的活动。您应该使用cancel() 来终止一个对话框。

【讨论】:

  • 现在试过了......行为相同:直接进入主要活动,这就是我想要关闭当前活动女巫的是第三个并返回上一个(第二个)
  • 您是否尝试过从 onError 方法返回 false,也许这会杀死 true 上的活动。
  • 如果我更改为 false,它不会更改其功能,只会弹出无法播放视频的错误消息,我想替换并添加更多功能
  • hmm,errorDialog 的侦听器中正在执行什么代码,我认为如果您返回 true 但不显示对话框,它不会终止活动?
  • 监听器 errorDialog 有一个带有 android:onClick="finish()" 的按钮,并且返回 true 或 false 仅影响它是否显示我的自定义布局以显示流中的错误或两个错误对话框。跨度>
【解决方案2】:

对话框不是新活动,它是当前活动的一部分或子活动。一旦按下按钮,您想隐藏/删除屏幕上出现的对话框,因此您应该使用cancel()`` instead. finish()` 将破坏当前活动。

 case KeyEvent.KEYCODE_MEDIA_STOP:
                cancel();
                return true;

【讨论】:

  • MEDIA_STOP 执行我想要的操作。销毁/关闭当前活动并返回到前一个活动。第二个让我回到主要活动,而不是前一个。
猜你喜欢
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
相关资源
最近更新 更多