Aleksey Timoshchenko Aleksey Timoshchenko - 7 months ago 10
Java Question

How to get a text from EditText?

I make

DialogFragment
with custom
layout
and set this such way

AlertDialog.Builder adb = new AlertDialog.Builder(getActivity())
.setView(layout)
.setCancelable(true);


This
layout
which was set in
DialogFragment
contains
EditText
. Gist in fact that when
DialogFragment
appear, user have to enter in
EditText
your comment and then push button
send
.

It was a problem when i tried
findViewById()
, because
DialogFragment
didn't extend
Activity
, thus i try solve this issue such way :

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();


But
etNoteFromWeb.getText().toString();
everytime give me back empty line, not
null
... Actually empty line.

What i am doing wrong?

Here is full code of
DialogFragment
:

public class MyDialog extends 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;
}
}

Answer

This is because you re-inflate your layout in onClick, so the text is always empty. You should move the line

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

inside onCreateDialog to make it work.

Comments