Problem with Positive And Negative Button in singleshoicedialog

Viewed 76

I have a bottom navigation fragment and i want to show a single choice dialog in a fragment when a button clicked but i have this logcat:

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)

here is my error's code:

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();
}
2 Answers

You should create a dialog as below:-

public class CustomDialogFragment extends DialogFragment {
private OnButtonClickListener mlistener;

public interface OnButtonClickListener {
     void OnPositiveButtonClickedMap(String[] item, int position);
     void OnNegativeButtonClickedMap();
}

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

    try {
        mlistener = (OnButtonClickListener) getActvity();
    } 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();
  }
}

In your Activity, implements OnButtonClickListener as below:-

class MyActivity extends Activity implements OnButtonClickListener {

}

For more info click here

Related