Androidアプリにスピナーがあり、それを表示できますが、秒です。クリックすると、アプリがクラッシュしてスローされます:
ウィンドウを追加できません -- トークン android.view.ViewRootImpl$Wfb@ が無効です: アクティビティは実行されていますか?
レイアウトはシンプルです。リストとリストに何かを追加するためのボタンを持つアクティビティがあります。追加ボタンをクリックすると、スピナー、テキスト ボックス、およびボタンを表示するポップアップ ウィンドウが開きます。スピナーをクリックするまで、すべて正常に動作します。
今、私はグーグルを1時間検索し、これらを見つけました:
BadTokenException PopUpWindow にウィンドウ スピナーを追加できません
Android Spinner エラー: android.view.WindowManager$BadTokenException: ウィンドウを追加できません
もっと。それらはすべてコンテキストを指しているように見えますが、「this」の使用から getApplicationContext まで、私の activity.context の名前まですべてを試しましたが、どれも機能しません。contentView をページに設定するだけでなく、誰かが提供した回答を 2 回使用してみましたが、事態は悪化しました (アプリはすぐに null ポインター例外でクラッシュしました)。
ポップアップウィンドウのコードは次のとおりです(「追加」ボタンがクリックされたときに実行されます):
public void add_itinerary_clicked(View view)
{
LayoutInflater i = (LayoutInflater) getBaseContext().getSystemService(LAYOUT_INFLATER_SERVICE);
View popupView = i.inflate(R.layout.itinerary_add_item_page, null);
popup = new PopupWindow(popupView, LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
popup.showAtLocation(popupView , Gravity.CENTER, 0, 0);
Spinner airlineChoice = (Spinner) popupView.findViewById(R.id.airlineSpinner);
Button addBtn= (Button) popupView.findViewById(R.id.finish_addItinerary);
String[] list = new String[1];
list = airlineMap.keySet().toArray(list);
ArrayAdapter<CharSequence> spinnerAdapter = new ArrayAdapter<CharSequence>(getApplicationContext(), android.R.layout.simple_spinner_item, list );
spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
airlineChoice.setAdapter(spinnerAdapter);
addBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish_addItinerary_clicked();
popup.dismiss();
}
});
}
この時点で私は完全に途方に暮れています。それが文脈ではない場合(他の人が言ったことを試しました)、それは何ですか?
完全なエラー メッセージは次のとおりです。
FATAL EXCEPTION: main
android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@40de1700 is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:567)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:246)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
at android.widget.PopupWindow.invokePopup(PopupWindow.java:993)
at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:899)
at android.widget.ListPopupWindow.show(ListPopupWindow.java:603)
at android.widget.Spinner$DropdownPopup.show(Spinner.java:981)
at android.widget.Spinner.performClick(Spinner.java:609)
at android.view.View$PerformClick.run(View.java:17355)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)