在Fragment中填充Spinner时出现BadTokenException

时间:2012-02-29 03:48:34

标签: android android-spinner actionbarsherlock

为什么我不能在支持包中的Fragment中填充Spinner的对话框?

由于UI设计的要求,我最终在Fragment中有子视图。所以结构如下: 活动 - >片段 - > (ProfileView,ContactsView)都扩展了FrameLayout

除了Spinner,一切看起来都很好。

在ProfileView中我有这个用于创建视图的构造函数。与此同时,我同时采用了Context和Fragment。

public ProfileView(Context context, Fragment parent) {
    super(context);
    this.context = context;
    this.parent = parent;
}

初始化视图时我有

List<LanguageVO> languageList = XMLResourceManager.GetLanguagesList(this.context.getResources()); // Load resource from XML     
spnLanguage = (Spinner) view.findViewById(R.id.spnLanguage);
    ArrayAdapter<CharSequence> adapter = new ArrayAdapter(this.parent.getSupportActivity().getApplicationContext(), android.R.layout.simple_spinner_item, languageList);
    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spnLanguage.setAdapter(adapter);

我尝试将所有这些传递给Adapter for Context,但它们都不起作用。所有这些都导致BadTokenException(除了两个开头为NULL)。

this.context
this.parent
this.parent.getActivity()
this.parent.getActivity().getParent() // NULL
this.parent.getSupportActivity()
this.parent.getSupportActivity().getParent() // NULL
parent.getSupportActivity().getApplicationContext()

屏幕工作正常,我甚至可以从上下文资源加载XML。那么为什么Spinner不起作用?

我应该补充一下,下面的堆栈跟踪是在2.2 / 2.3设备上运行的。该代码在ICS上运行良好。

堆栈追踪:

02-29 03:18:35.675: E/AndroidRuntime(4165): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
02-29 03:18:35.675: E/AndroidRuntime(4165):     at android.view.ViewRoot.setView(ViewRoot.java:539)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:203)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:117)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at android.app.Dialog.show(Dialog.java:241)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at android.app.AlertDialog$Builder.show(AlertDialog.java:802)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at android.widget.Spinner.performClick(Spinner.java:261)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at android.view.View$PerformClick.run(View.java:9152)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at android.os.Handler.handleCallback(Handler.java:587)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at android.os.Looper.loop(Looper.java:123)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at android.app.ActivityThread.main(ActivityThread.java:3691)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at java.lang.reflect.Method.invokeNative(Native Method)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at java.lang.reflect.Method.invoke(Method.java:507)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)
02-29 03:18:35.675: E/AndroidRuntime(4165):     at dalvik.system.NativeStart.main(Native Method)

0 个答案:

没有答案
相关问题