AlertDialogのカスタムビューを使用するアプリケーションで作業しています。編集テキストフィールドが空の場合、送信ボタンが無効になるようにしたいと思います。私はいくつかの例をオンラインで見つけましたが、私の実装では、送信ボタンへの参照でnullが返され続けています。 edittextにテキストを入力すると、アプリケーションがクラッシュします。ここでコメントアウトボタンをつかんで私の失敗の試みとalertdialogクラスは次のとおりです。カスタムAlertDialogボタンへの参照は、onTextChangedのときにnullを返します。
public class FileNameDialogFragment extends DialogFragment {
private static final String TAG = "dialogFragment";
private EditText namefield;
private Button submit;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
LayoutInflater inflater = LayoutInflater.from(getActivity());
View v = inflater.inflate(R.layout.file_prompt_dialog, null, false);
namefield = (EditText) v.findViewById(R.id.nameField);
AlertDialog dialog = new AlertDialog.Builder(getActivity())
.setTitle(R.string.dialog_title)
.setView(v)
.setIcon(R.drawable.icon)
.setPositiveButton(R.string.btnOK, new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
MainActivity.setFileName(namefield.getText().toString());
String fileName = namefield.getText().toString();
Toast.makeText(getActivity(), MainActivity.getUrl().toString(), Toast.LENGTH_SHORT).show();
MainActivity.download(MainActivity.getUrl(), getActivity(), MainActivity.getPath(), fileName);
}
})
.setNegativeButton(R.string.btnCancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dismiss();
}
})
.create();
//I have also tried to place the code that is below here. neither works
dialog.show();
/*
* this is the section of code that i am having trouble with
*
submit = ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE);
namefield.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//left intentionally blank
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (count == 0){
submit.setEnabled(false);
}else{
submit.setEnabled(true);<--NullPointerException
}
}
@Override
public void afterTextChanged(Editable s) {
//left intentionally blank
}
});*/
return dialog;
}
}
私は入力を検証するための方法として、この作品を作る方法を見つけることを期待しています。私は入力がインターネットからダウンロードされたファイルに名前を付けるために使用されるので、このフィールドを空白のままにしておきたい。
ダイアログにカスタム表示を設定します。私は標準の 'getButton'は動作しないと思うので、' v.findViewByID() 'を使う必要があります –
ログを添付してください。 –