如何从EditText获取文本?

时间:2016-04-30 14:20:16

标签: java android

我使用自定义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;
}
}

2 个答案:

答案 0 :(得分:2)

这是因为您在onClick中重新扩充了布局,因此文本始终为空。 你应该移动

etNoteFromWeb = (EditText) view.findViewById(R.id.etNoteFromWeb);

onCreateDialog内以使其有效。

答案 1 :(得分:0)

你创建新视图并从中获取字符串!!它不是对话框的视图 使用:

EditText etNoteFromWeb = (EditText)dialog.findViewById(R.id.etNoteFromWeb);