Android 安卓A两次打开B回到A,但第三次崩溃

Android 安卓A两次打开B回到A,但第三次崩溃,android,webview,expandablelistview,back,tabview,Android,Webview,Expandablelistview,Back,Tabview,好的,我的应用程序有一个带有3个选项卡的选项卡视图。我的两个标签没有问题。第一个只是打开一个webview,它可以工作,第三个显示一系列图片按钮,这些按钮依次打开具有选项的页面,并且工作正常 我的第二个问题是这个问题。它有一个可扩展的列表视图,其中有4个父级,每个父级的子级数量不同。我使用了可扩展列表视图,每个孩子在网络视图中打开一个不同的页面。这部分工作得很好。问题来了,一旦我打开网页,我可以点击后退按钮,它返回到第二个选项卡,这是我想要的,然后如果我选择另一个链接,它的工作正常,后退按钮带我

好的,我的应用程序有一个带有3个选项卡的选项卡视图。我的两个标签没有问题。第一个只是打开一个webview,它可以工作,第三个显示一系列图片按钮,这些按钮依次打开具有选项的页面,并且工作正常

我的第二个问题是这个问题。它有一个可扩展的列表视图,其中有4个父级,每个父级的子级数量不同。我使用了可扩展列表视图,每个孩子在网络视图中打开一个不同的页面。这部分工作得很好。问题来了,一旦我打开网页,我可以点击后退按钮,它返回到第二个选项卡,这是我想要的,然后如果我选择另一个链接,它的工作正常,后退按钮带我回去。但如果我打开第三个,当我按下后退按钮时,它就会崩溃

case 1:
                        setContentView(R.layout.viewer);
                        content = new String(
                                "insert web page here");
                        showContent = new Intent(getApplicationContext(),
                                Viewer.class);
                        showContent.setData(Uri.parse(content));
                        replaceContentView("Called", showContent);
                        break;
那是其中一页。replaceContentView方法如下所示:

public void replaceContentView(String id, Intent newIntent) {
    // Obtain the view of 'Called' activity using its Intent 'newIntent'
    View view = getLocalActivityManager().startActivity(id,
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
            .getDecorView();
    // set the above view to the content of 'Calling' activity.
    this.setContentView(view);
}
public class Viewer extends ActivityGroup {
WebView viewer;
final Context myApp = this;

public void onBackPressed() {

    if (viewer.isFocused() && viewer.canGoBack()) {
        viewer.goBack();
    } else {
        Intent back = new Intent(this, Resources1.class);
        replaceContentView("Called", back);
    }
}

public void replaceContentView(String id, Intent newIntent) {
    // Obtain the view of 'Called' activity using its Intent 'newIntent'
    View view = getLocalActivityManager().startActivity(id,
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
            .getDecorView();

    // set the above view to the content of 'Calling' activity.
    this.setContentView(view);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewer);
    Intent launchingIntent = getIntent();
    String content = launchingIntent.getData().toString();
    viewer = (WebView) findViewById(R.id.webView);
    viewer.setWebViewClient(new myWebClient());
    viewer.getSettings().setJavaScriptEnabled(true);
    viewer.getSettings().setSupportMultipleWindows(true);
    viewer.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    viewer.getSettings().setSupportZoom(true);
    //viewer.setWebChromeClient(new MyWebChromeClient());
    viewer.loadUrl(content);
    viewer.requestFocus();
}

public class myWebClient extends WebViewClient {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {

        super.onPageStarted(view, url, favicon);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        view.loadUrl(url);
        return true;
    }
}
查看器类如下所示:

public void replaceContentView(String id, Intent newIntent) {
    // Obtain the view of 'Called' activity using its Intent 'newIntent'
    View view = getLocalActivityManager().startActivity(id,
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
            .getDecorView();
    // set the above view to the content of 'Calling' activity.
    this.setContentView(view);
}
public class Viewer extends ActivityGroup {
WebView viewer;
final Context myApp = this;

public void onBackPressed() {

    if (viewer.isFocused() && viewer.canGoBack()) {
        viewer.goBack();
    } else {
        Intent back = new Intent(this, Resources1.class);
        replaceContentView("Called", back);
    }
}

public void replaceContentView(String id, Intent newIntent) {
    // Obtain the view of 'Called' activity using its Intent 'newIntent'
    View view = getLocalActivityManager().startActivity(id,
            newIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
            .getDecorView();

    // set the above view to the content of 'Calling' activity.
    this.setContentView(view);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.viewer);
    Intent launchingIntent = getIntent();
    String content = launchingIntent.getData().toString();
    viewer = (WebView) findViewById(R.id.webView);
    viewer.setWebViewClient(new myWebClient());
    viewer.getSettings().setJavaScriptEnabled(true);
    viewer.getSettings().setSupportMultipleWindows(true);
    viewer.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
    viewer.getSettings().setSupportZoom(true);
    //viewer.setWebChromeClient(new MyWebChromeClient());
    viewer.loadUrl(content);
    viewer.requestFocus();
}

public class myWebClient extends WebViewClient {
    @Override
    public void onPageStarted(WebView view, String url, Bitmap favicon) {

        super.onPageStarted(view, url, favicon);
    }

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {

        view.loadUrl(url);
        return true;
    }
}
我已经发布了我认为是相关的代码,如果你需要更多的只是问。这件事我已经做了几天了,还没弄明白

添加日志目录:

05-10 08:41:06.560: I/dalvikvm(13342): threadid=1: stack overflow on call to Landroid/text/Layout;.draw:VLLLI
05-10 08:41:06.560: I/dalvikvm(13342):   method requires 276+20+52=348 bytes, fp is 0x4003a400 (256 left)
05-10 08:41:06.560: I/dalvikvm(13342):   expanding stack end (0x4003a300 to 0x4003a000)
05-10 08:41:06.560: I/dalvikvm(13342): Shrank stack (to 0x4003a300, curFrame is 0x4003dc10)
05-10 08:41:06.560: D/AndroidRuntime(13342): Shutting down VM
05-10 08:41:06.560: W/dalvikvm(13342): threadid=1: thread exiting with uncaught exception (group=0x40a421f8)

05-10 08:41:06.560: W/dalvikvm(7024): threadid=1: thread exiting with uncaught     exception (group=0x40a421f8)
05-10 08:41:06.580: E/AndroidRuntime(7024): FATAL EXCEPTION: main
05-10 08:41:06.580: E/AndroidRuntime(7024): java.lang.StackOverflowError
05-10 08:41:06.580: E/AndroidRuntime(7024):     at   android.text.BoringLayout.draw(BoringLayout.java:400)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.widget.TextView.onDraw(TextView.java:5088)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.View.draw(View.java:10983)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.widget.ListView.drawChild(ListView.java:3223)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.widget.AbsListView.dispatchDraw(AbsListView.java:2092)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.widget.ListView.dispatchDraw(ListView.java:3218)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.widget.ExpandableListView.dispatchDraw(ExpandableListView.java:230)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.View.draw(View.java:11088)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.widget.AbsListView.draw(AbsListView.java:3398)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.View.draw(View.java:10986)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2887)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2489)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.drawChild(ViewGroup.java:2885)
05-10 08:41:06.580: E/AndroidRuntime(7024):     at android.view.ViewGroup.dispatchDraw(ViewGrou
05-10 08:41:08.310: I/Process(7024): Sending signal. PID: 7024 SIG: 9

请发布logcat错误。@Sam我用logcat更新了帖子。谢谢,我想可能是其他一些代码中没有,但是看起来像是某种递归/循环调用在堆栈中溢出了一些视图。这可能是因为当您返回到第二个选项卡时,它会在旧选项卡上创建一个新的视图,而不是返回到旧的视图。感谢您的帮助,但问题似乎是使用了选项卡视图。我试着把它放在一个地方,如果你点击了TabView下的一个选项,它会打开它并保留选项卡,这就是替换内容的目的。这样做的问题是,它不是开始一个新的活动,而是添加到活动中,然后当你再次添加时,活动就会继续增长,并且永远不会结束。最后,我只需要三个选项卡的选项卡视图,当选项卡下的某个内容被选中时,我启动了一个新的活动,顶部没有选项卡。