在布局膨胀后,在DialogFragment中编辑editText

时间:2014-07-15 19:23:37

标签: java android

我有一个自定义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);
}

0 个答案:

没有答案