尝试获取DialogFragment的PositiveButton的NullPointerException

时间:2015-08-20 13:45:09

标签: java android android-dialogfragment

在我的Android应用程序中,我使用自定义视图创建了一个自定义DialogFragment,但我希望正面和负面按钮具有透明背景。

所以我看到了一些SO答案,我做了类似的事情:

private class PersonalInfoDialogFragment extends DialogFragment {

    @Override
    public void onStart(){
        super.onStart();
        Button pButton =  ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_POSITIVE);
        Button nButton =  ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_NEGATIVE);

        pButton.setBackgroundColor(getResources().getColor(Color.TRANSPARENT));
        nButton.setBackgroundColor(getResources().getColor(Color.TRANSPARENT));
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        LayoutInflater inflater = getActivity().getLayoutInflater();
        final View view=inflater.inflate(R.layout.personalinformation_dialog, null);
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.personalinformation)
               .setView(view)
               .setPositiveButton(R.string.edit, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                          //Some code
                   }
               })
               .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int id) {
                       // User cancelled the dialog
                   }
               });
        // Create the AlertDialog object and return it
        final AlertDialog dialog = builder.create();
        //I also tried this: dialog.getButton(DialogInterface.BUTTON_POSITIVE).setBackgroundColor(Color.TRANSPARENT);
        return dialog;
    }
}

我不知道为什么我面临NullPointerException。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

    public Button  pButton ,nButton ;

    @Override
        public void onStart(){
            super.onStart();

        }

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {

            LayoutInflater inflater = getActivity().getLayoutInflater();
            final View view=inflater.inflate(R.layout.personalinformation_dialog, null);
             pButton =  ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_POSITIVE);
             nButton =  ((AlertDialog) getDialog()).getButton(DialogInterface.BUTTON_NEGATIVE);

            pButton.setBackgroundColor(getResources().getColor(Color.TRANSPARENT));
            nButton.setBackgroundColor(getResources().getColor(Color.TRANSPARENT));
            AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
            builder.setTitle(R.string.personalinformation)
                   .setView(view)
                   .setPositiveButton(R.string.edit, new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                              //Some code
                       }
                   })
                   .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
                       public void onClick(DialogInterface dialog, int id) {
                           // User cancelled the dialog
                       }
                   });
            // Create the AlertDialog object and return it
            final AlertDialog dialog = builder.create();
            //I also tried this: dialog.getButton(DialogInterface.BUTTON_POSITIVE).setBackgroundColor(Color.TRANSPARENT);
            return dialog;
        }
    }