提问者:小点点

singleshoicedialog中的正负按钮问题


我有一个底部导航片段,当单击按钮时,我想在片段中显示一个单选项对话框,但我有以下日志猫:

2020-06-24 18:47:27.954 18946-18946/app E/AndroidRuntime: FATAL EXCEPTION: main
    Process: app, PID: 18946
    java.lang.NullPointerException: Attempt to invoke interface method 'void app.MapChoiceFragment$SingleChoiceListener.OnNegativeButtonClickedMap()' on a null object reference
        at app.baharestanschool.ir.MapChoiceFragment$1.onClick(MapChoiceFragment.java:55)
        at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:174)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7523)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)

下面是我的错误代码:

public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    final String[] item = getActivity().getResources().getStringArray(R.array.addresses);
    builder.setTitle("choose")
            .setSingleChoiceItems(item, position, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    position=i;
                }
            })
            .setPositiveButton("O", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    mlistener.OnPosetiveButtonClickedMap(item,position);
                }
            })
            .setNegativeButton("c", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    mlistener.OnNegativeButtonClickedMap();
                }
            });
    return builder.create();
}

共1个答案

匿名用户

您应该创建如下对话框:-

public class CustomDialogFragment extends DialogFragment {
private OnButtonClickListener mlistener;

public interface OnButtonClickListener {
     void OnPositiveButtonClickedMap();
     void OnNegativeButtonClickedMap();
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    try {
        mlistener = (OnButtonClickListener) getActivity();
    } catch (Exception e) {
    }
}

public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    final String[] item = getActivity().getResources().getStringArray(R.array.addresses);
    builder.setTitle("choose")
            .setSingleChoiceItems(item, position, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    position=i;
                }
            })
            .setPositiveButton("O", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    mlistener.OnPositiveButtonClickedMap(item,position);
                }
            })
            .setNegativeButton("c", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    mlistener.OnNegativeButtonClickedMap();
                }
            });
    return builder.create();
  }
}

在您的activity中,实现OnButtonClickListener,如下所示:-

class MyActivity extends Activity implements OnButtonClickListener {

}