我有一个自定义DialogFragment
课程。在OnCreateDialog
中,我这样夸大了我的观点:
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
LayoutInflater inflater = getActivity().getLayoutInflater();
myView = inflater.inflate(R.layout.my_layout, null);
builder.setView(myView);
然后我捕获对EditText的引用:
mText = (EditText)myView.findViewById(R.id.mtext_id);
如果我尝试在onCreateDialog
方法中编辑editText,一切正常。
但是如果尝试使用相同的捕获引用从同一个类中的不同方法编辑editText,它就不起作用。
mText.setText("foo");
使用原因InvocationTargetException
生成错误NullPointerException
。
我尝试使用对id的新引用,从父Activity而不是DialogFragment本身调用它,总是具有相同的结果。
编辑包含更多代码:
完整的onCreateDialog
public class TimeInputFragment extends DialogFragment {
OnTimeEnteredListener myCallback;
View myView;
EditText mText;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setMessage("foo")
.setPositiveButton("Start timer", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
myCallback.callbackMethod();
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
// Cancel
}
});
LayoutInflater inflater = getActivity().getLayoutInflater();
myView = inflater.inflate(R.layout.dialog_timeentry, null);
builder.setView(myView);
mText = (EditText)myView.findViewById(R.id.TimeDialogInput);
return builder.create();
}
编辑editText的完整方法(与onCreateDialog
public void setDialogText(String text) {
mText.setText(text);
}
从父活动调用片段的代码:
FragmentManager fragmentManager = getSupportFragmentManager();
void createDialog(String title) {
TimeInputFragment mDialog = new TimeInputFragment();
mDialog.show(fragmentManager);
mDialog.setDialogText(title);
}