Android中finish当前活动会导致应用程序关闭。

9

我正在执行maswebview类,我只想结束这个活动。我尝试使用 maswebview.this.finish(),但执行时应用程序被关闭。如果我为选项卡内容设置一个新视图,则可以正确加载,并且webviewmas会消失,但仅有一段时间,然后再次全屏适合。如何完全结束maswebview?谢谢

public void onClick(View arg0) 
            {
                /*
                Intent intent = getIntent();
                intent.addFlags(Intent.FLAG_ACTIVITY_TASK_ON_HOME);
                startActivityForResult(intent, 1);
                Intent intentmas = new Intent (maswebview.this, mas.class);
                intentmas.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); 
                intentmas.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
                intentmas.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
                intentmas.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
                View vista = getLocalActivityManager().startActivity("maswb", intentmas).getDecorView();
                setContentView(vista);  */

                maswebview.this.finish();

3
请添加完整的堆栈跟踪信息以查看异常情况。 - Houcine
2
你需要添加更多相关的代码,仅有这些是不足以表达任何意思的。 - Simon Dorociak
是的,抱歉,请查看编辑。在logcat上没有异常,应用程序只是关闭而没有错误。 - Jaume
4个回答

5

当您调用finish()时,您的应用程序堆栈中是否有其他活动?如果没有,您将需要启动所需的活动而不是结束当前活动。

但实际上,我觉得您正在尝试完成一些可以更简单地完成的任务。您能否提供有关任务和您正在使用的应用程序结构的更多信息?

从您所说的,似乎您有选项卡式用户界面,并且正在尝试在其中一个选项卡中显示Web视图,然后隐藏它。

首先,我不明白为什么您想要将Web视图放在单独的活动中。我认为您只需将其放在一个选项卡的布局中,并调用setVisibility(GONE)以将其隐藏。

其次 - 这很重要 - 看起来您正在尝试以的方式实现选项卡 - TabWidget,TabHost等。 自Honeycomb发布以来,有更方便的方法来实现选项卡式用户界面 - 操作栏选项卡和片段 - 这种方法更加方便,也会使您的Web视图问题过时:有一个称为WebViewFragment的东西,它基本上是一个智能的WebView - 它将以最少的工作量处理自己的生命周期(即在删除时暂停,在添加时恢复)。研究片段需要一些努力,但绝对值得。您可以在Android SDK Manager中下载称为android-support-v4的静态库,将Fragments API用于早于Honeycomb android sdks。


WebViewFragment是到达它的起点!我非常感谢你的帮助。 - Jaume

2
你是否在启动新活动之前调用了 "maswebview.this.finish();"?如果只想启动新活动而不需要旧活动存在,则可以在manifest.xml中添加android:nohistory="true"。这将导致当前活动是队列中唯一的活动。请参见 此处。为了更好地理解发生了什么,请提供更多信息。希望这可以帮助你。

两种方法都不完全可行,但是这个链接可以作为一个很好的起点... +1 - Jaume

0
尝试以下代码。
@Override
        public void onBackPressed() {
        if(childView != null && parentLayout.getChildCount()==2){
            childView.stopLoading();
            parentLayout.removeViewAt(parentLayout.getChildCount()-1);
            if(webView.getVisibility() == View.GONE)
                webView.setVisibility(View.VISIBLE);
        }else{          
            super.onBackPressed();
        }

0

你是否有一个启动此活动的父活动?如果是,请确保在启动maswebview后不要调用finish(),这样父活动将保留在堆栈中。一旦maswebview退出,onResume将为您的父活动调用。


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