在我的项目中,我试图以编程方式打开optionsMenu,而无需单击用户的菜单键.我试过 openOptionsMenu()但它给了我一个像这样的错误android.view.WindowManager $ BadTokenException:无法添加窗口 - ..为什么它...这是什么解决方案...
08-13 14:53:02.687:E/AndroidRuntime(1213):FATAL EXCEPTION:main 08-13 14:53:02.687:E/AndroidRuntime(1213):java.lang.RuntimeException:无法启动活动ComponentInfo {com. veytila.candideye/com.veytila.candideye.MainActivity}:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null无效; 你的活动在运行吗?
我正在使用按钮的 onClick 回调中的 AlertDialog.Builder 创建警报对话框
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setCancelable(false);
builder.setNegativeButton(R.string.cancel, (dialog, which) -> isReporting = false);
builder.show();
Run Code Online (Sandbox Code Playgroud)
99.9% 的时间一切正常,但最近我开始看到一些这样的崩溃报告:
Fatal Exception: android.view.WindowManager$BadTokenException: Unable to add window -- window android.view.ViewRootImpl$W@db362a2 has already been added
at android.view.ViewRootImpl.setView(ViewRootImpl.java:902)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:342)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:97)
at android.app.Dialog.show(Dialog.java:538)
at android.support.v7.app.AlertDialog$Builder.show(AlertDialog.java:958)
at com.gurushots.app.adapters.VoteAdapter.showReporting(VoteAdapter.java:242)
at com.gurushots.app.adapters.VoteAdapter.lambda$onBindViewHolder$2$VoteAdapter(VoteAdapter.java:197)
at com.gurushots.app.adapters.VoteAdapter$$Lambda$2.onClick(Unknown Source)
at android.view.View.performClick(View.java:6213)
at android.view.View$PerformClick.run(View.java:23645)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6642)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Run Code Online (Sandbox Code Playgroud)
异常表示我正在尝试重新添加已经显示的警报,但事实并非如此。为什么会这样?
我试图从视图中的AsyncTask的onPostExecute()(A.xml)mainActivity中膨胀视图(B.xml)(其中有微调器)
MainActivity.class
protected void onPostExecute(String result) {
LayoutInflater vi = (LayoutInflater) getApplicationContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = vi.inflate(R.layout.B, null);
branded_spinner = (Spinner) v.findViewById(R.id.Spinner01);
adapter_branded = new ArrayAdapter<String>(**MainActivity.this**,
android.R.layout.simple_spinner_item, Branded);
adapter_branded.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
branded_spinner.setAdapter(adapter_branded);
branded_spinner.setOnItemSelectedListener(**MainActivity.this**);
Run Code Online (Sandbox Code Playgroud)
}
它适用于4.0及以上版本
但是对于2.3.3我得到一个错误
11-30 15:28:55.492: E/AndroidRuntime(540): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
11-30 15:28:55.492: E/AndroidRuntime(540): at android.view.ViewRoot.setView(ViewRoot.java:531)
11-30 15:28:55.492: E/AndroidRuntime(540): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)
11-30 15:28:55.492: E/AndroidRuntime(540): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
Run Code Online (Sandbox Code Playgroud)
是的,我试图使用getApplicationContext(),但这仍然是相同的错误
我提到了
使用getApplication()作为上下文抛出"无法添加窗口 - 令牌null不适用于应用程序"的对话框
Android:ProgressDialog.show()与getApplicationContext崩溃
Android 1.6:"android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用程序"
当我想在活动开始时显示alertdialog时,我不断收到异常.我想不通为什么?我真的很感激解释.
代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
if (!isInternetConnectionAvailable()) {
AlertDialog alert = new AlertDialog.Builder(getApplicationContext()).create();
alert.setMessage("TEST DIALOG!!!");
alert.show();
}
...
Run Code Online (Sandbox Code Playgroud)
03-19 16:04:33.933:ERROR/AndroidRuntime(15145):FATAL EXCEPTION:main 03-19 16:04:33.933:ERROR/AndroidRuntime(15145):java.lang.RuntimeException:无法启动活动ComponentInfo {de. droidgroup.THMInfo/de.droidgroup.THMInfo.Activities.StartActivity}:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用程序03-19 16:04:33.933:ERROR/AndroidRuntime(15145 ):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)03-19 16:04:33.933:ERROR/AndroidRuntime(15145):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)03- 19 16:04:33.933:ERROR/AndroidRuntime(15145):在android.app.ActivityThread.access $ 2300(ActivityThread.java:125)03-19 16:04:33.933:ERROR/AndroidRuntime(15145):at android.app .ActivityThread $ H.handleMessage(ActivityThread.java:2033)03-19 16:04:33.933:ERROR/AndroidRuntime(15145):at android.os.Handler.dispatchMessage(Handler.java:99)03-19 16:04 :33.933:ERROR/AndroidRuntime(15145):在android.os.Looper.loop(Looper.java:123)03-19 16:04:33.933:ERROR/AndroidRuntime(15145):在android.app.ActivityThread.main(ActivityThread.java:4627)03 -19 16:04:33.933:ERROR/AndroidRuntime(15145):at java.lang.reflect.Method.invokeNative(Native Method)03-19 16:04:33.933:ERROR/AndroidRuntime(15145):at java.lang. reflect.Method.invoke(Method.java:521)03-19 16:04:33.933:ERROR/AndroidRuntime(15145):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:858)03 -19 16:04:33.933:ERROR/AndroidRuntime(15145):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)03-19 16:04:33.933:ERROR/AndroidRuntime(15145): at dalvik.system.NativeStart.main(Native Method)03-19 16:04:33.933:ERROR/AndroidRuntime(15145):引起:android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用03-19 16:04:33.933:ERROR/AndroidRuntime(15145):在android.view.ViewRoot.setView(ViewRoot.java:509)03-19 16:04:33.933:ER ROR/AndroidRuntime(15145):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)03-19 16:04:33.933:ERROR/AndroidRuntime(15145):在android.view.WindowManagerImpl.addView(WindowManagerImpl.java) :91)03-19 16:04:33.933:ERROR/AndroidRuntime(15145):在android.app.Dialog.show(Dialog.java:241)03-19 16:04:33.933:ERROR/AndroidRuntime(15145): …
我已经创建了一个自定义数组适配器,我有图像视图和onclick的图像视图我正在打开一个Dialogue但它显示我 android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于申请 她的是我的代码
下面的行给了我错误
if (context != null) {
Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.spread_dialogue);
dialog.setTitle("New Post");
dialog.show();
}
public class Customfeedadapter extends ArrayAdapter<Rowfeeds> {
Context context;
Rowfeeds feeds;
ViewHolder holder = null;
ImageView imgview, likeimgview;
Vector<String> mfeedid = new Vector<String>();
Vector<String> muserid = new Vector<String>();
public String guestlist;
private ProgressDialog simpleWaitDialog;
public String mssg;
public String likemssg;
Vector<String> mfeedlike = new Vector<String>();
Vector<String> mfeedspread = new Vector<String>();
Vector<String> mfeeddate = new Vector<String>();
Vector<String> mfeedtime = …Run Code Online (Sandbox Code Playgroud) 我有一个带有图像的列表视图。用户可以单击缩略图,然后将下载更大的图像并将其显示在新活动内的 ImageView 中。
\n\nonclick 位于我的适配器中的 GetView 内:
\n\nholder.iconImage.setOnClickListener(new View.OnClickListener() {\n @Override\n public void onClick(View v) {\n\n try{\n\n //load the image\n String name = folderName.get(position).toString();\n Intent i = new Intent(context, ImageViewLarge.class);\n i.putExtra("link", link);\n i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);\n context.startActivity(i);\n\n\n }\n catch(Exception e){\n Toast.makeText(context, "errror: " + e.toString() , Toast.LENGTH_LONG).show();\n }\n }\n\n});\nRun Code Online (Sandbox Code Playgroud)\n\n显示图像可能需要几秒钟的时间,因此我希望在加载图像时在屏幕上显示一个对话框或一个圆形进度旋转圆圈。
\n\n如果我的 onclick 位于我的适配器内,我该如何执行此操作?
\n\n我在适配器内尝试了此操作,但收到错误:
\n\ndialog = ProgressDialog.show(context, "Opening Image","Please wait..");\n\n"Unable to add window \xe2\x80\x94 token null is not for an application\xe2\x80\x9d \nRun Code Online (Sandbox Code Playgroud)\n 可能重复:
Android 1.6:"android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于应用程序"
android.view.WindowManager $ BadTokenException:无法添加窗口 - 令牌null不适用于android.view.WindowManagerImpl.addView(WindowManagerImpl.java:177)上android.view.ViewRoot.setView(ViewRoot.java:509)的应用程序)在android.view.WindowManagerImpl.addView(WindowManagerImpl.java:91)
我的代码:
public class aaaa extends View {
private WindowManager mWindowManager;
public aaaa(Context context) {
super(context);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawBitmap(BitmapFactory.decodeResource(this.getResources(), R.drawable.icon), 0, 0, null);
super.onDraw(canvas);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
ddd();
return super.onTouchEvent(event);
}
void ddd(){
mWindowManager = WindowManagerImpl.getDefault();
WindowManager.LayoutParams lp = new LayoutParams(50,50);
lp.x = 50;
lp.y = 50;
mWindowManager.addView(this, lp);
}
Run Code Online (Sandbox Code Playgroud) android ×7
dialog ×2
crash ×1
java ×1
menu ×1
onclick ×1
optionmenu ×1
progress-bar ×1
spinner ×1