按照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.