我尝试从Fragment向它调用的Dialog发送3个信息,但是当我尝试我的代码时,在触发Dialog和communicator后,我在该Line上使用被调用的方法(dataSave)获得nullPointerException。 / p>
我的主要活动:
[...]public void onDataSave(int Note, String Fach, String Wahl)
{
// TODO Auto-generated method stub
SpeicherDialog f2 =(SpeicherDialog) manager.findFragmentByTag("speicherdialog");
f2.
dataSave
(Note, Fach, Wahl);
}´
'SpeicherDialog':
public class SpeicherDialog extends DialogFragment {
int note;
String fach;
String wert;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setTitle("Note speichern?")
.setMessage("Willst du die Note " + note + " im Fach " + fach + "speichern?")
.setNegativeButton("Abbrechen", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do nothing (will close dialog)
}
})
.setPositiveButton("Speichern", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which)
{
// do something
}
})
.create();
}
public void dataSave(int Note, String Fach, String Wahl)
{
// TODO Auto-generated method stub
note = Note;
fach = Fach;
wert = Wahl;
}
}
和Action,当Dialog和communicator被触发时:
SpeicherDialog speicherDialog = new SpeicherDialog();
speicherDialog.show(getActivity().getSupportFragmentManager(), "speicherdialog");
comm.onDataSave(note, fach, wert);
答案 0 :(得分:0)
您的代码不清楚,为什么在调用方法中已经有片段变量时,使用调用“onDataSave”的MainActivity监听器?
您收到NullPointerException,因为尚未添加Fragment。 DialogFragment的“show”方法是异步的(它创建一个FragmentTransaction并提交它)。这就是findFragmentByTag方法返回null的原因。
要使代码正常工作,您只需要替换创建对话框的方法:
SpeicherDialog speicherDialog = new SpeicherDialog();
speicherDialog.dataSave(note, fach, wert);
speicherDialog.show(getActivity().getSupportFragmentManager(), "speicherdialog");
要改进此代码并考虑对话框片段的生命周期,您应该考虑通过setArguments方法提供参数,如示例所示: http://developer.android.com/reference/android/app/DialogFragment.html#BasicDialog