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

Java 我的方法总是返回0,忽略条件,java,android,methods,int,return,Java,Android,Methods,Int,Return,我读过一些相关的问题,比如和,但问题是int不能承受更大的价值。就我而言,情况并非如此 我在按钮的OnClick中调用下面的方法,但它总是返回0 public int showRadioAlertDialog(final Button button, String title, final List<String> list, int selectedIndex) { final AlertDi

我读过一些相关的问题,比如和,但问题是
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;
        }
    }
public int showRadioAlertDialog(最终按钮、字符串标题、,
最终列表,int selectedIndex){
final AlertDialog.Builder=新建AlertDialog.Builder(mContext);
建造商名称(名称);
builder.setCancelable(false);
builder.setSingleChoiceItems(list.toArray(新字符串[list.size()]),
selectedIndex,新建DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
如果(哪个>-1){
位置=哪个;
}
}
});
setPositiveButton(“确认”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
printLog(“List position=“+List.get(position));
如果(位置>-1){
button.setHint(list.get(position));
}
}
});
builder.setNegativeButton(“取消”,null);
AlertDialog=builder.create();
dialog.show();
如果(位置>-1){
返回位置;
}否则{
返回-1;
}
}
位置
是一个全局变量。
我所期望的是它应该返回
-1
或所选位置的索引

  • 我注意到的第一件事是,它在用户选择前返回值 单选项中的项,它不应在用户之前返回任何内容 选择一个项目

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


  • 请解释一下为什么它是
    0
    。如果您将整型变量定义为全局变量,则会自动给出默认值,值为0。在您的例子中,有一个在show()方法调用之后的条件代码。这意味着调用show()方法后,将立即执行代码。由于0>-1,因此您将始终得到0。希望这对你有帮助。如果要在单击对话后添加位置,则在对话的回调方法中,需要显式地将值设置为该变量位置。返回将不起作用。因为当你点击对话按钮时,值已经返回。为什么o回来了我已经提到了我答案的开头。

    你称之为:

    if (position > -1) {
        return position;
    } else {
        return -1;
    }
    
    设置onClickListeners之后。问题是,当事件发生时,onClickListeners是从不同的线程调用的,这意味着在设置
    position
    时,该值已经返回

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


    调试呢?看起来您没有更新位置,并且在单击“确认”时始终为0。您从未将值设置为“位置”,因此它将始终返回0。
    ... onClick(){
        callback(position);
    }
    ...
    
    
    void callback(position){
        do whatever with the variable
    }