转载自:http://hi.baidu.com/luoziding/blog/item/739388c97b73c1e153664f6b.html
按照Android手册上的自定义Dialog章节学习使用自定义Dialog是出现如下错误:
android.view.WindowManager$BadTokenException:
Unableto add window--tokennullisnotforan application
手册上代码逻辑如下:
LayoutInflater inflater = (LayoutInflater)getApplicationContext().getSystemService(LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.custom_dialog,
(ViewGroup)findViewById(R.id.layout_root));
TextView tv = (TextView)layout.findViewById(R.id.custom_text);
tv.setText("Hello, this is a custom dialfo");
ImageView iv = (ImageView)layout.findViewById(R.id.custom_image);
iv.setImageResource(R.drawable.icon);
builder = new AlertDialog.Builder(getApplicationCOntext());
builder.setView(layout);
dialog = builder.create();
将红色标记语句改为 builder = new AlertDialog.Builder(this);
错误原因:
You need to use your Activty as the Context for the Dialog not the Application.
Android is looking for a view to display the Dialog in and the Application does not have one but yourActivity will. The Application is an object which ties your app together and has a Context as it knows about which locale you're running in and so on, but it relies on Activities to display things to the user.