I am getting the same $BadTokenException in the simple app below.
MainActivity.java as follows:
package com.example.badtokenexample;
import android.os.Bundle;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.PopupWindow;
import android.widget.Spinner;
public class MainActivity extends Activity {
private String[] settingsItems = { "Entry 1", "Entry 2", "Entry 3",
"Entry 4" };
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button mainB = (Button) findViewById(R.id.MainB);
mainB.setOnClickListener(onSettings);
Spinner mainS = (Spinner) findViewById(R.id.MainS);
ArrayAdapter adapter =
ArrayAdapter.createFromResource( this, R.array.mainItems,
android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource
(android.R.layout.simple_spinner_dropdown_item);
mainS.setAdapter(adapter);
mainS.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
@SuppressWarnings("rawtypes")
public void onItemSelected(AdapterView arg0, View v,
int i, long lng) {
}
public void onNothingSelected(
@SuppressWarnings("rawtypes")
AdapterView arg0) {
}
});
}
private View.OnClickListener onSettings = new View.OnClickListener() {
public void onClick(View v) {
Code: Select all
LayoutInflater layoutInflater = (LayoutInflater)
getBaseContext()
.getSystemService
(LAYOUT_INFLATER_SERVICE);
View popupView = layoutInflater.inflate
(R.layout.pusettings, null);
final PopupWindow popupWindow = new
PopupWindow(popupView,
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
Spinner pusettingsS = (Spinner)
popupView.findViewById(R.id.PuB);
@SuppressWarnings({ "unchecked", "rawtypes" })
ArrayAdapter sAdapter = new
ArrayAdapter(v.getContext(),
android.R.layout.simple_spinner_item,
settingsItems);
pusettingsS.setAdapter(sAdapter);
pusettingsS
.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener() {
@SuppressWarnings("rawtypes")
public void onItemSelected(AdapterView
arg0, View v, int i, long lng) {
}
public void onNothingSelected(
@SuppressWarnings("rawtypes") AdapterView arg0) {
}
});
popupWindow.showAsDropDown
(pusettingsS, 10, 200);
}
};
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
activity_main.xml is as follows:
pusettings.xml is as follows:
And the error message is:
02-11 15:21:13.471: E/AndroidRuntime(795): FATAL EXCEPTION: main
02-11 15:21:13.471: E/AndroidRuntime(795): android.view.WindowManager$BadTokenException: Unable to add window -- token android.view.ViewRootImpl$W@40d0b800 is not valid; is your activity running?
02-11 15:21:13.471: E/AndroidRuntime(795): at android.view.ViewRootImpl.setView(ViewRootImpl.java:567)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:246)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:69)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.widget.PopupWindow.invokePopup(PopupWindow.java:993)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.widget.PopupWindow.showAsDropDown(PopupWindow.java:899)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.widget.ListPopupWindow.show(ListPopupWindow.java:603)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.widget.Spinner$DropdownPopup.show(Spinner.java:981)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.widget.Spinner.performClick(Spinner.java:609)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.view.View$PerformClick.run(View.java:17340)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.os.Handler.handleCallback(Handler.java:725)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.os.Handler.dispatchMessage(Handler.java:92)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.os.Looper.loop(Looper.java:137)
02-11 15:21:13.471: E/AndroidRuntime(795): at android.app.ActivityThread.main(ActivityThread.java:5039)
02-11 15:21:13.471: E/AndroidRuntime(795): at java.lang.reflect.Method.invokeNative(Native Method)
02-11 15:21:13.471: E/AndroidRuntime(795): at java.lang.reflect.Method.invoke(Method.java:511)
02-11 15:21:13.471: E/AndroidRuntime(795): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
02-11 15:21:13.471: E/AndroidRuntime(795): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
02-11 15:21:13.471: E/AndroidRuntime(795): at dalvik.system.NativeStart.main(Native Method)
The spinner in MainActivity works, but the spinner in onSettings doesn't. What am I doing wrong, or is there a work around? Thanks.