1

コードに単純なダイアログを実装しようとしています。しかし、うまくいきません。公式の開発者ガイドを含め、利用可能なすべてのチュートリアルを検索しましたが、何も機能しません。logcat から得たエラーは、nullPointerException を取得していることです。これは getActivity にあると推測しています。何か助けはありますか?

これは私が持っているものです: これは私のカスタム ダイアログ クラスです。

public class SaveDialog extends DialogFragment {

    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Save Password");
        builder.setView(getContentView());
        Dialog dialog = builder.create();
        dialog.show();
        return dialog;
    }

    private View getContentView() {
        LayoutInflater inflater = getActivity().getLayoutInflater();
    
        return inflater.inflate(R.layout.dialog, null);
    }
}

これは、onclickが発生する私の主な活動です

private void savePassword() {
    SaveDialog savePasswordDialog = new SaveDialog();
    savePasswordDialog.show(savePasswordDialog.getSupportFragmentManager(), "tag");
}

onClick を起動するたびに、アプリがクラッシュします。その上で、現在 getSupportFragmentManager を使用しようとしていますが、未定義と表示されます。

4

4 に答える 4

14

FragmentActivity でのみ使用できる getSupportFragmentManager() を使用する必要があります。

アクティビティをフラグメント アクティビティに変更する必要があります。

この回答を確認してください

于 2012-12-02T09:38:44.343 に答える
1

android.support.v4.app.DialogFragment または android.support.v4.app.Fragment から getFragmentManager() を呼び出すだけです。android.support.v4.app.FragmentManager (これは、サポート FragmentManager) を返します。

于 2014-04-28T15:07:17.930 に答える
-1

onCreateDialog() でダイアログを手動で表示する必要はありません。savePassword() を呼び出したときに DialogFragment がその魔法を働かせる (そしてダイアログを表示する) には、それを返すだけで十分です。

したがって、 onCreateDialog から次の行を削除します: dialog.show();

そしてそれはうまくいくはずです。幸運を!

于 2012-12-02T12:24:11.757 に答える