5

私のクラスはDialogFragmentに引数を渡す必要がありますが、NullPointerExceptionの(ダイアログクラスの)onCreateメソッド内でアプリがクラッシュします。コードのダイアログフラグメントクラス部分:

public class ConfirmDialog extends DialogFragment {

public ConfirmDialog() {}

 ConfirmDialog newInstance(String f) {
    ConfirmDialog d = new ConfirmDialog();

    Bundle args = new Bundle();
    args.putString("FILE_NAME", f);
    d.setArguments(args);

    return d;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    file = getArguments().getString("FILE_NAME");
}

私はこの行にnullpointerを持っています:

file = getArguments().getString("FILE_NAME");

そして、私は理由がわかりません。ダイアログを呼び出すコードも貼り付けます

private void showConfirmDialog(String file) {
    FragmentManager fm = getSupportFragmentManager();
    ConfirmDialog dialog = new ConfirmDialog();
    Log.i("SHOWFILEACTIVITY", file);
    dialog.newInstance(file);
    dialog.show(fm, "fragment_confirm_dialog");
}

ここで、「ファイル」文字列はnullではありません。

Log.i("SHOWFILEACTIVITY", file);
4

1 に答える 1

7

ConfirmDialogコンストラクターを介してを作成してから、を呼び出します。newInstance()これにより、別の(適切な)が作成されますConfirmDialog。ただし、その適切なインスタンスを破棄します。

これを修正するには:

メソッドnewInstance()は静的である必要があります。

public static ConfirmDialog newInstance(String f) {
    ConfirmDialog d = new ConfirmDialog();

    Bundle args = new Bundle();
    args.putString("FILE_NAME", f);
    d.setArguments(args);

    return d;
}

また、メソッドを適切showConfirmDialog()に使用するように変更する必要があります。newInstance()

private void showConfirmDialog(String file) {
    FragmentManager fm = getSupportFragmentManager();
    Log.i("SHOWFILEACTIVITY", file);

    ConfirmDialog dialog = ConfirmDialog.newInstance(file);
    dialog.show(fm, "fragment_confirm_dialog");
}
于 2013-03-17T17:41:39.357 に答える