我已经阅读了一些相关问题,例如this和this,但问题是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
为什么0
。
请解释一下为什么0
。我们将不胜感激。
答案 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