私はDialogFragment
に設定されたこのlayout
はEditText
を含むカスタムlayout
でDialogFragment
を作り、EditTextからテキストを取得するには?
AlertDialog.Builder adb = new AlertDialog.Builder(getActivity())
.setView(layout)
.setCancelable(true);
このような方法を設定します。実際には、DialogFragment
が表示されたら、ユーザはEditText
にあなたのコメントを入力してからsend
を押す必要があります。
DialogFragment
は、私はこの問題、このような方法で解決してみてくださいので、Activity
を拡張していなかったので、私は、findViewById()
を試みたとき、それは問題だった:
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.activity_note_dialog, null);
EditText etNoteFromWeb = (EditText)view.findViewById(R.id.etNoteFromWeb);
String response = etNoteFromWeb.getText().toString();
しかしetNoteFromWeb.getText().toString();
毎回空行、ないnull
を私に戻って与えます。..実際には空行。
私は間違っていますか?ここで
はDialogFragment
の完全なコードです:
パブリッククラスMyDialogはDialogFragmentを拡張{
final String LOG_TAG = "MyDialog";
private static MyDialog myDialog;
private EditText etNoteFromWeb;
int layout;
@Override
public void onCreate(Bundle savedState) {
super.onCreate(savedState);
Bundle args = this.getArguments();
layout = args.getInt("layout");
}
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder adb = new AlertDialog.Builder(getActivity())
.setView(layout)
.setCancelable(true);
if (layout == R.layout.activity_note_dialog) {
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(layout, null);
LinearLayout llSent = (LinearLayout) view.findViewById(R.id.llSent);
LinearLayout llSkip = (LinearLayout) view.findViewById(R.id.llSkip);
llSent.setOnClickListener(listener);
llSkip.setOnClickListener(listener);
adb.setView(view);
}
return adb.create();
}
View.OnClickListener listener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (layout == R.layout.activity_note_dialog) {
LayoutInflater inflater = getActivity().getLayoutInflater();
View view = inflater.inflate(R.layout.activity_note_dialog, null);
etNoteFromWeb = (EditText) view.findViewById(R.id.etNoteFromWeb);
String response = etNoteFromWeb.getText().toString();
// String response = "etNoteFromWeb.getText().toString()";
// Здесь в System.out.println ничего нет...9((но когда раскоментирована строка
// выше и указываю статический текст, то все работает, проблема именно в том,
// что не достает текст из EditText
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! " + response);
switch (v.getId()) {
case R.id.llSent:
onClick.onDialogClickListener(response);
myDialog.dismiss();
break;
case R.id.llSkip:
onClick.onDialogClickListener(null);
myDialog.dismiss();
break;
}
}
}
};
public void dismissDialog(final MyDialog dialog, int daleyTime) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
try {
dialog.dismiss();
} catch (IllegalStateException e) {
e.printStackTrace();
}
}
}, daleyTime);
}
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
Log.d(LOG_TAG, "MyDialog: onDismiss");
}
public void onCancel(DialogInterface dialog) {
super.onCancel(dialog);
Log.d(LOG_TAG, "MyDialog: onCancel");
}
public static MyDialog newInstance(int layout) {
myDialog = new MyDialog();
Bundle args = new Bundle();
args.putInt("layout", layout);
myDialog.setArguments(args);
return myDialog;
}
// Этот интерфейс я реализовал для того чтоб можно было передавать данные из DialogFragment
public interface OnButtonClick {
void onDialogClickListener(String response);
}
OnButtonClick onClick;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
onClick = (OnButtonClick) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement onDialogClickListener");
}
}
@Override
public void onDetach() {
super.onDetach();
onClick = null;
}
}
System.out.prinlnを使用しないでください。代わりにLog.d(TAG、 "Unique identifier")を使用してください。 –
@prathamkesarkar私はルーキーです。私は 'Log'で何度か作業してみましたが、毎回期待していなかったことに気付きました...もう一度試してみます –