我使用自定义DialogFragment
制作layout
并将其设置为
AlertDialog.Builder adb = new AlertDialog.Builder(getActivity())
.setView(layout)
.setCancelable(true);
layout
中设置的DialogFragment
包含EditText
。事实上,当DialogFragment
出现时,用户必须输入EditText
您的评论,然后按下send
按钮。
我尝试findViewById()
时遇到了问题,因为DialogFragment
没有延伸Activity
,因此我尝试解决此问题:
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;
}
}
答案 0 :(得分:2)
这是因为您在onClick
中重新扩充了布局,因此文本始终为空。
你应该移动
etNoteFromWeb = (EditText) view.findViewById(R.id.etNoteFromWeb);
在onCreateDialog
内以使其有效。
答案 1 :(得分:0)
你创建新视图并从中获取字符串!!它不是对话框的视图 使用:
EditText etNoteFromWeb = (EditText)dialog.findViewById(R.id.etNoteFromWeb);