問題描述
我無法讓 AlertDialog 將文本傳遞回調用它的活動.問題似乎是調用 findViewByID 時找不到正確的 EditText,但我是 Android 新手,不知道為什么會這樣.
I'm having trouble getting an AlertDialog to pass text back to the activity that calls it. It seems the issue is that it fails to find the proper EditText when calling findViewByID, but I'm new to Android and don't know why that may be.
代碼如下:
public class ModifyDialogFragment extends DialogFragment {
/* The activity that creates an instance of this dialog fragment must
* implement this interface in order to receive event callbacks.
* Each method passes the DialogFragment in case the host needs to query it. */
public interface MDialogListener {
public void onMDialogPositiveClick(String newValue);
}
// Use this instance of the interface to deliver action events
MDialogListener mListener;
String mEntryName = "";
EditText mEditText;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the Builder class for convenient dialog construction
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
final View modifyView = inflater.inflate(R.layout.modify_dialog, null);
builder.setView(modifyView);
final EditText editText = (EditText) getActivity().findViewById(R.id.modificationText);
builder.setPositiveButton(R.string.modify, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
mListener.onMDialogPositiveClick(editText.getText().toString());
}
});
builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// User cancelled the dialog
}
});
// Create the AlertDialog object and return it
return builder.create();
}
// Override the Fragment.onAttach() method to instantiate the ModifyDeleteDialogListener
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
// Verify that the host activity implements the callback interface
try {
// Instantiate the MDDialogListener so we can send events to the host
mListener = (MDialogListener) activity;
} catch (ClassCastException e) {
// The activity doesn't implement the interface, throw exception
throw new ClassCastException(activity.toString()
+ " must implement MDialogListener");
}
}
以及對應的 modify_dialog.xml:
And the corresponding modify_dialog.xml:
<?xml version="1.0" encoding="utf-8"?>
<EditText xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/modificationText"
android:inputType="text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:layout_marginLeft="4dp"
android:layout_marginRight="4dp"
android:layout_marginBottom="4dp"/>
為什么沒有找到editText?我可以做些什么來使這項工作按預期工作,將新字符串傳遞回活動?
Why isn't the editText being found? What can I do to make this work as intended, passing the new string back to the activity?
推薦答案
改變
final EditText editText = (EditText) getActivity().findViewById(R.id.modificationText);
到
final EditText editText = (EditText) modifyView.findViewById(R.id.modificationText);
您的 EditText
位于 modify_dialog.xml
中,因此您需要使用該 layout
膨脹的變量(此處為 modifyView
) 來查找 id
而不是 getActivty()
將查找的 layout
.
Your EditText
lives in modify_dialog.xml
so you need to use the variable that was inflated with that layout
(here modifyView
) to find the id
not the layout
that getActivty()
will look in.
這篇關于Android 警報對話框無法找到視圖的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!