一般正規的 Android layout 中,如需控制元件,首先需執行 findViewById 取得元件的控制入口,例如
Spinner spinner = (Spinner)view.findViewById(R.id.spinner_player); EditText edittextPlayer = (EditText)view.findViewById(R.id.editText_player);
若元件所屬的 layout 被設定到 AlertDialog 之中呢?如果還是使用上述的呼叫方式,雖然 Eclipse 不會報錯,但執行時一旦操作元件,將會遇到 "null pointer" 的 exception。
需改寫成以下方式,第 2、3 行的元件必須使用第 1 行定義的 view 來呼叫 findViewById。
View view = View.inflate(this, R.layout.activity_player, null); Spinner spinner = (Spinner)view.findViewById(R.id.spinner_player); EditText edittextPlayer = (EditText)view.findViewById(R.id.editText_player); AlertDialog.Builder alertDialog = new AlertDialog.Builder(this); alertDialog.setTitle("Player Setting"); alertDialog.setMessage("Set the number of players"); alertDialog.setCancelable(false); // 避免點選畫面其他地方而關閉 AlertDialog alertDialog.setView(view); alertDialog.setPositiveButton("OK", null); alertDialog.setNegativeButton("Cancel", null); alertDialog.show();
0 意見:
張貼留言