我的方法总是返回0忽略条件

时间:2017-12-12 12:00:53

标签: java android methods int return

我已经阅读了一些相关问题,例如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

  3. 请解释一下为什么0。我们将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果将整数变量定义为全局变量,则会自动给出默认值,值为0.在您的情况下,您具有在show()方法调用之后的条件代码。这意味着在调用show()方法后立即执行代码。因为0> -1因此你将永远得到0.希望这对你有所帮助。如果要在单击对话框后添加位置,则在回调对话方法中需要将值明确设置为该变量位置。返回不起作用。因为当您单击对话框按钮时已经返回了值。为什么 o返回我已经提到过我的回答。

答案 1 :(得分:1)

你这叫:

position

设置onClickListeners后。问题是当事件发生时从不同的线程调用onClickListeners,这意味着在设置... onClick(){ callback(position); } ... void callback(position){ do whatever with the variable } 时,已经返回了值。

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

rebalanceClusterClients