【问题标题】:Problem with Positive And Negative Button in singleshoicedialogsingleshoicedialog 中正负按钮的问题
【发布时间】:2020-06-24 14:35:21
【问题描述】:

我有一个底部导航片段,我想在单击按钮时在片段中显示一个单选对话框,但我有这个 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)

这是我的错误代码:

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

【问题讨论】:

  • 我认为mlistener 为空
  • 如何给mlistener赋值?
  • 什么是mListener

标签: java android dialog


【解决方案1】:

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

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

在您的 Activity 中,实现 OnButtonClickListener 如下:-

class MyActivity extends Activity implements OnButtonClickListener {

}

更多信息请点击here

【讨论】:

  • 在线mlistener.OnPositiveButtonClickedMap(item,position);我有这个错误Expected 0 arguments but found 2
  • 更新了请检查。修改OnButtonClickListener
  • 我使用了您更新的 guid,但现在出现以下错误
  • 2020-06-24 20:18:23.164 21374-21374/app E/AndroidRuntime:致命异常:主进程:app,PID:21374 java.lang.NullPointerException:尝试调用接口方法' void app.baharestanschool.ir.MapChoiceFragment$OnButtonClickListener.OnPositiveButtonClickedMap(java.lang.String[], int)' 在空对象引用上
【解决方案2】:

您可以构建自己的对话框。我使用以下示例构建自己的自定义对话框enter link description here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多