android - TabActivity 使用的 BadTokenException ActivityGroup

标签 android fragment nested-class tabactivity activitygroup

我需要在我的应用程序的 TabHost 中实现嵌套 Activity 。我使用这样的 ActivityGroup 类:

  public class CustomActivityGroup extends ActivityGroup {

View rootView;


public static CustomActivityGroup group;


private ArrayList<View> history;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.history = new ArrayList<View>(); group = this;



      View view = getLocalActivityManager().startActivity("LoginActivity", new Intent(this,RegisterActivity.class) .addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP))
      .getDecorView();
      replaceView(view);


}

@Override
protected void onResume() {

    super.onResume();
    this.history = new ArrayList<View>();
    group = this;

}

public void replaceView(View v) {

    if (history.size() == 0) {
        if (rootView != null) {
            history.add(rootView);
            rootView = null;
        }
    }
    history.add(v);  
    setContentView(v);
}

public void back() {
    try {
        if (history.size() > 0) {
        history.remove(history.size() - 1);
        if (history.size() > 0) {
            setContentView(history.get(history.size() - 1));
        } else {
            finish();
        }
    } else {
        finish();
    }
    } catch (Exception ex) {
    }
}

public int getHistorySize() {
    return history.size();
}

@Override
public void onBackPressed() {
    try {
        CustomActivityGroup.group.back();
    } catch (Exception ex) {

    }
    return;
}
}

在我的 TabActivity 中:

  intent = new Intent().setClass(this, CustomActivityGroup.class);

    spec = tabHost.newTabSpec("tab_2").setIndicator("Sign up",getResources().getDrawable(R.drawable.signup)).setContent(intent);
    tabHost.addTab(spec);

但是当我点击相应的标签时,我得到了

 FATAL EXCEPTION: main
 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.assignmentexpert/com.activitygroups.CustomActivityGroup}: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.assignmentexpert/com.assignmentexpert.RegisterActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@405ceb00 is not valid; is your activity running?
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
    at android.app.ActivityThread.startActivityNow(ActivityThread.java:1491)
    at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)

    at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
    at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:676)
    at android.widget.TabHost.setCurrentTab(TabHost.java:348)
    at android.widget.TabHost$2.onTabSelectionChanged(TabHost.java:141)
    at android.widget.TabWidget$TabClickListener.onClick(TabWidget.java:456)
    at android.view.View.performClick(View.java:2485)
    at android.view.View$PerformClick.run(View.java:9080)
    at android.os.Handler.handleCallback(Handler.java:587)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:3687)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:867)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:625)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.assignmentexpert/com.assignmentexpert.RegisterActivity}: android.view.WindowManager$BadTokenException: Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@405ceb00 is not valid; is your activity running?
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651)
    at android.app.ActivityThread.startActivityNow(ActivityThread.java:1491)
    at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
    at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
    at com.activitygroups.CustomActivityGroup.onCreate(CustomActivityGroup.java:31)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)
    ... 18 more
 Caused by:  Unable to add window -- token android.app.LocalActivityManager$LocalActivityRecord@405ceb00 is not valid; is your activity running?
    at android.view.ViewRoot.setView(ViewRoot.java:532)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
    at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
    at android.view.Window$LocalWindowManager.addView(Window.java:424)
    at android.app.Dialog.show(Dialog.java:241)
    at com.asynctaskbase.AbstractTaskProgressDialogFragment.onCreateDialog(AbstractTaskProgressDialogFragment.java:68)
    at com.asynctaskbase.AbstractTaskProgressDialogFragment.onCreateDialog(AbstractTaskProgressDialogFragment.java:1)
    at android.support.v4.app.DialogFragment.getLayoutInflater(DialogFragment.java:295)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:871)
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1083)
    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:635)
    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1431)
    at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:523)
    at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
    at android.app.Activity.performStart(Activity.java:3791)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1624)
    ... 24 more

我做错了什么?

最佳答案

我找到了这个问题的原因。我将我的 FragmentActivities 添加到 ActivityGroup,然后在 TabHost 中使用它们。当我单击名为 ProgressDialog 的按钮时,我得到了这个异常。我应该这样创建它

progressDialog = new ProgressDialog(getActivity().getParent());

,不是

 progressDialog = new ProgressDialog(getActivity());

关于android - TabActivity 使用的 BadTokenException ActivityGroup,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14836420/

相关文章:

安卓 fragment 布局

java - 即使使用 -keep,kotlin 类的构造函数中的参数名称也会被 proguard 删除

android - 我如何强制 Android 不使用已用库项目中的某些语言文件?

android - FragmentActivity 创建多个 Fragments 导致问题

android - 在屏幕旋转时在 ViewPager 中保存 fragment 状态

android - 使用 FragmentPagerAdapter 时不会调用 Fragment onResume()

css - 在 LESS 中重用嵌套类以重用 Sprite 图标

c++ - 为嵌套类模板重载运算符<<

c++ - 被多重继承隐藏的嵌套类

android - 使用 ScheduledExecutorService 在 Android 中取消计划任务