从片段到对话的通信器

时间:2014-11-23 17:27:26

标签: android android-fragments android-dialog

我尝试从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);    

1 个答案:

答案 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