我在AlertDialog中使用Spinner作为过滤器。当我在选择项目后重新打开对话框时,我想默认选择之前选择的项目。但是某种魔法正在发生,我无法理解为什么微调器正在选择错误的项目。微调器的项列表是一个字符串数组,编号从4到42 Background
当我选择第一项{"4","6",.."42"}
时,位置应为0,当我重新打开对话框时,应显示确切的项目。但相反,它会在第4位显示项"4"
。
Code Dialogfragment:
"10"
我在听众中制作了两个Toast。疯狂的是,在OnItemSelectedListener中显示正确的位置值。在PositiveButton OnClickListener中显示错误的值。你知道吗?
答案 0 :(得分:1)
我自己做了一个解决方法。我没有通过调试找到错误。所以我不适合这个职位。我使用该值来重新选择所选的项目。不是最好的方法,但适用于这个小项目列表。
代码:
if(chosenFilterItems.get(position).equals("")) {
spinner2.setSelection(0);
}
else{
for(int i=0; i<list.length;i++){
if(list[i].equals(chosenFilterItems.get(position))){
spinner2.setSelection(i);
}
}
}
spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int spinner2Position, long id) {
filterItem = list[spinner2Position];
}
dialog.setPositiveButton("Bestätigen", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
chosenFilterItems.set(position,filterItem);
mListener.onChosenDialogItem(filterItem,position);
dismiss();
}
});
答案 1 :(得分:0)
使用Handler并添加一些延迟
int delay = 1000;
runOnUiThread (new Runnable () {
@Override
public void run () {
if(chosenFilterItems.get(position).equals("")) {
spinner2.setSelection(0);
} else {
Integer.valueOf(chosenFilterItems.get(position)));
}
}
}, delay);