【问题标题】:My Method always return 0 ignoring the condition我的方法总是返回 0 忽略条件
【发布时间】:2018-05-26 02:38:01
【问题描述】:

我已经阅读了一些相关的问题,例如thisthis,但问题是int 无法拥有更大的价值。就我而言,不是那样。

我在按钮的OnClick 中调用下面的方法,但它总是返回0

public int showRadioAlertDialog(final Button button, String title,
                                    final List<String> list, int selectedIndex) {

        final AlertDialog.Builder builder = new AlertDialog.Builder(mContext);
        builder.setTitle(title);
        builder.setCancelable(false);

        builder.setSingleChoiceItems(list.toArray(new String[list.size()]),
                selectedIndex, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        if (which > -1) {
                            position = which;
                        }
                    }
                });
        builder.setPositiveButton("Confirm", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

                printLog("List position = " + list.get(position));
                if (position > -1) {
                    button.setHint(list.get(position));
                }
            }
        });
        builder.setNegativeButton("Cancel", null);
        AlertDialog dialog = builder.create();
        dialog.show();

        if (position > -1) {
            return position;
        } else {
            return -1;
        }
    }

position 是一个全局变量。
我期待的是它应该返回-1 或所选位置的索引。

  1. 我注意到的第一件事是它在用户选择之前返回值 单选项目,它不应该在用户之前返回任何东西 选择一个项目。

  2. 第二个如果它在选择之前返回,我在最后有一个检查 所以应该是-1为什么0

请解释一下为什么它是0。任何努力将不胜感激。

【问题讨论】:

  • 调试呢?看起来你没有更新位置,它总是 0
  • 在确认单击时,您从未将值设置为位置,因此它将始终返回 0。

标签: java android methods int return


【解决方案1】:

如果您将整数变量定义为全局变量,则会自动给出默认值并且值为 0。在您的情况下,您在 show() 方法调用之后有条件代码。这意味着将在调用 show() 方法后立即执行代码。由于 0 > -1 因此您将始终得到 0。希望这对您有所帮助。如果您想在单击对话后添加位置,那么在对话的回调方法中,您需要将值显式设置为该变量位置。退货将不起作用。因为当您单击对话按钮时,值已经返回。以及为什么o返回我已经提到了我的答案的开头。

【讨论】:

    【解决方案2】:

    你这样称呼:

    if (position > -1) {
        return position;
    } else {
        return -1;
    }
    

    设置 onClickListeners 后。问题是事件发生时从不同的线程调用 onClickListeners,这意味着在设置 position 时,该值已经返回。

    当您使用 onClickListener 时,您无法获得正确的返回方法,因为它们被称为内部类(或者,如果您扩展 onCLickListener,则称为方法)。改用回调方法(以下是伪代码,无效。不要复制粘贴并期望它起作用):

    ... onClick(){
        callback(position);
    }
    ...
    
    
    void callback(position){
        do whatever with the variable
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-01
      • 2015-04-08
      • 2023-01-28
      • 2014-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多