如何创建Android上PopupWindow内部的微调窗口小部件? 在微调时,点击获取BadT

2019-09-19 07:34发布

我一直在网上搜索解决这个问题,但不幸的是,我似乎无法找到答案。 我创建一个XML文件,与它内部的一个微调一个PopupWindow。 内部的按钮事件侦听器,我调用下面的代码以膨胀PopupWindow并在屏幕上显示它。

LayoutInflater inflater = getLayoutInflater();
settings_layout = inflater.inflate(R.layout.setting_popout, (ViewGroup) findViewById(R.id.setting_popout));

// Creates a popup window of required width and height, and displays
// the popup in the center of the screen.
pw_settings = new PopupWindow(settings_layout, 400, 470, true); 
pw_settings.showAtLocation(settings_layout, Gravity.CENTER, 0, 0);

spColors = (Spinner) settings_layout.findViewById(R.id.linecolor);

// Sets the initial values of the color spinner and the listener
ArrayAdapter<CharSequence> adapter_color = 
    ArrayAdapter.createFromResource(this, R.array.colors_array, android.R.layout.simple_spinner_item);
adapter_color.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spColors.setAdapter(adapter_color);
spColors.setSelection(adapter_color.getPosition(over.color));

当点击该按钮时,弹出一个窗口显示了罚款。 但是,我得到的logcat以下错误,当我点击微调。

android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌android.view.ViewRootImpl$W@41402a90无效; 在您的活动运行? ...

我不知道我在做什么错。 任何帮助将不胜感激! 谢谢!

Answer 1:

这可能有点晚了,不完全的答案,原来的问题,但我从另一个问题,发现这里插入下面的行成XML为我的微调防止错误的发生。

android:spinnerMode="dialog"



Answer 2:

我在这个问题了几次,现在运行,唯一的非耗时的方法,我发现是上述麦克Fosker提出的一个。

android:spinnerMode="dialog"

使得在微调显示了在一个单独的弹出,这不跳闸您在代码中打开的初始弹出窗口中的选项列表。 例如 :

<Spinner
android:id="@+id/myspinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:spinnerMode="dialog" />


Answer 3:

尝试:

settings_layout = inflater.inflate(R.layout.setting_popout, null);
((ViewGroup) findViewById(R.id.setting_popout)).addView(settings_layout);

另外,为什么你在弹出窗口中的布局连接到一个ViewGroup已经在你的活动中? 机会是你可以逃脱:

settings_layout = inflater.inflate(R.layout.setting_popout, null);


文章来源: How to create a Spinner widget inside of a PopupWindow in Android? Get BadTokenException when clicking on Spinner