1 个 TAB 下的多个活动,更改活动时崩溃

发布于 2025-01-06 07:48:29 字数 2052 浏览 4 评论 0原文

我在一个选项卡下有 2 个简单的活动(每个活动托管 1 个按钮的相对布局)。它们中的每一个都具有彼此的链接,因此您可以从一项活动转到另一项活动(所有操作都在同一选项卡下进行)。程序在第三次循环后崩溃(第一个活动 - 第二个 - 第一个 - 第二个 - 第一个 - 第二个)。

我使用以下代码从一个活动转到另一个活动:

Tabs s = (Tabs) getParent();
Intent myIntent = new Intent(getApplicationContext(), Map.class);
View view = s.getLocalActivityManager().startActivity("map",
    myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
setContentView(view);

无论我在活动中拥有什么布局,基本上它仍然会在每个第三个循环中崩溃。

我没有其他想法,除了 android 将此导航(从同一个选项卡下的 1 个活动到另一个活动)解释为不定式循环?这基本上是用户所做的,而不是我正在编程的循环。

这是android的bug还是我做错了什么?

我收到此错误:

02-17 10:36:00.566: E/AndroidRuntime(4155): FATAL EXCEPTION: main
02-17 10:36:00.566: E/AndroidRuntime(4155): java.lang.StackOverflowError
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.widget.TextView.getExtendedPaddingTop(TextView.java:1281)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.widget.TextView.getVerticalOffset(TextView.java:3570)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.widget.TextView.onDraw(TextView.java:4050)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.View.draw(View.java:6880)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.View.draw(View.java:6883)

编辑: 好的,我知道为什么会出现这个错误。每次我从一项活动转到另一项活动时,我都会创建新的意图并开始新的活动。情况可能就是这样。 但我怎样才能重用它们呢?如果我尝试重用该视图,则会收到此错误:

02-17 13:14:03.429: E/AndroidRuntime(5374): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

I have 2 simple activities (relative layouts hosting 1 button each) under one tab. Each of them has a link to each other so you can go from one activity to another (everything works under the same tab). The program crashes after the 3rd loop (1st activity - 2nd - 1st - 2nd - 1st - 2nd).

I go from one activity to another with the following code:

Tabs s = (Tabs) getParent();
Intent myIntent = new Intent(getApplicationContext(), Map.class);
View view = s.getLocalActivityManager().startActivity("map",
    myIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView();
setContentView(view);

It doesn't matter what layouts I have in the activities, basically it still crashes every 3rd loop.

I have no other ideas except that android interprets this navigation (from 1 activity to another under the same tab) as an infinitive loop? Which basically users does, not a loop that is being programmed by me.

Is it some android bug or I am doing something wrong?

I am getting this error:

02-17 10:36:00.566: E/AndroidRuntime(4155): FATAL EXCEPTION: main
02-17 10:36:00.566: E/AndroidRuntime(4155): java.lang.StackOverflowError
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.widget.TextView.getExtendedPaddingTop(TextView.java:1281)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.widget.TextView.getVerticalOffset(TextView.java:3570)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.widget.TextView.onDraw(TextView.java:4050)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.View.draw(View.java:6880)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.ViewGroup.drawChild(ViewGroup.java:1646)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.ViewGroup.drawChild(ViewGroup.java:1644)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:1373)
02-17 10:36:00.566: E/AndroidRuntime(4155):     at android.view.View.draw(View.java:6883)

EDIT:
OK, I have an idea why this error appears. Every time I go from one activity to another I'm creating new Intent and starting new Activity. That might be the case.
But how can I reuse them? If I try to reuse the view I get this error:

02-17 13:14:03.429: E/AndroidRuntime(5374): java.lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

韶华倾负 2025-01-13 07:48:29

第一个可疑的事情是 getApplicationContext() 的使用。使用 getApplicationContext() “几乎总是错误的”,如下所述:何时调用活动上下文或应用程序上下文?

The first suspicious thing is the use of getApplicationContext(). Using getApplicationContext() "is almost always wrong", as explained here: When to call activity context OR application context?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文