【问题标题】:Android Fragment IllegalStateExceptionAndroid 片段 IllegalStateException
【发布时间】:2013-10-09 14:09:06
【问题描述】:

这是我要输出的内容:

10-09 21:57:56.344: W/dalvikvm(3141): threadid=1: thread exiting with uncaught exception (group=0x40cb8378)
10-09 21:57:56.364: E/AndroidRuntime(3141): FATAL EXCEPTION: main
10-09 21:57:56.364: E/AndroidRuntime(3141): java.lang.IllegalStateException: Activity has been destroyed
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1329)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:548)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:532)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at com.trade.MainActivity.showFragment(MainActivity.java:85)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at com.trade.MainActivity.showSettingsFragment(MainActivity.java:179)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at com.trade.Home.setting(Home.java:40)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at com.trade.Home.onOptionsItemSelected(Home.java:31)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.app.Activity.onMenuItemSelected(Activity.java:2534)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:353)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at com.android.internal.policy.impl.PhoneWindow.onMenuItemSelected(PhoneWindow.java:964)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at com.android.internal.view.menu.ListMenuPresenter.onItemClick(ListMenuPresenter.java:166)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.widget.AdapterView.performItemClick(AdapterView.java:298)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.widget.AbsListView.performItemClick(AbsListView.java:1086)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2859)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.widget.AbsListView$1.run(AbsListView.java:3533)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.os.Handler.handleCallback(Handler.java:615)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.os.Looper.loop(Looper.java:213)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at android.app.ActivityThread.main(ActivityThread.java:4787)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at java.lang.reflect.Method.invokeNative(Native Method)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at java.lang.reflect.Method.invoke(Method.java:511)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:789)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:556)
10-09 21:57:56.364: E/AndroidRuntime(3141):     at dalvik.system.NativeStart.main(Native Method)
10-09 21:57:58.847: I/Process(3141): Sending signal. PID: 3141 SIG: 9

我不知道这个例外。请帮我理解一下。

谢谢

【问题讨论】:

  • 你想做什么?我认为您正在尝试访问已被破坏的活动,请提供一些详细信息以便我提供帮助
  • 请出示您的MainActivity
  • 在您的代码中,您是否做过类似thisActivity = new MainActivity() 的操作?如果你这样做了,那就停下来!唯一应该引用Activity 的是它自己。
  • 您正试图在 MainActivity 被销毁后对其执行某些操作。可能是一些 FragmentTransaction!
  • 我对应用程序的主要想法是使用 fb auth 创建一个应用程序,所以我按照 fb dev page n create auth 成功,我想从 fb auth 主要活动中调用我自己的活动,并重用 fb注销片段,不幸的是这个错误

标签: android android-fragmentactivity


【解决方案1】:

我会尽力回答您关于异常的一般性问题,因为这就是您所问的。如果您需要针对应用程序中特定错误的具体帮助,您需要在此处发布您的MainActivity(尤其是第 85 行附近的部分)。

你得到的 excpetion 是一个 android 系统异常,它告诉你你在一个不再“活着”的Activity 上运行。这非常容易实现,并且很可能与不正确的变量管理(或问题下方的 cmets 中提到的不正确的实例管理)有关。不要通过 new 运算符自己构建 Activity 实例 em>)。一个例子可能如下

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;

public class MyActivity extends Activity {

    public static Activity instance;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (instance != null) {
            instance.setContentView(R.layout.myLayout);
        }

        instance = this;

        finish();
        startActivity(new Intent(this, MyActivity.class));
    }
}

您可能在这个简单的示例中认识到,变量instance 仅在第一个重新-进入活动时被读取!但是那里仍然引用了旧的(现在“死的”)活动。那么系统应该怎么做呢?对这个“死”活动执行操作?不,它会给你上面看到的异常

简而言之:您很可能拥有FragmentDialog 或 UI 的另一个组成部分“操作”“死”活动(操作 = 使用对它的引用或一些资源(FragmentManager...)

正如我所说,您的错误可能很容易修复,请将您的代码提供给我们,我们将能够提供帮助。但也许你甚至可以使用上述信息自己修复它——我想这肯定会让你自己更满意:)

【讨论】:

  • 抱歉朋友迟到了,我修好了,重新设计了整个应用程序逻辑,非常感谢您的努力和支持
  • 您是否通过我们的帮助了解了异常情况?如果是这样,您总是可以投票...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 1970-01-01
  • 2018-05-23
  • 1970-01-01
相关资源
最近更新 更多