Android - 微调器位置值

时间:2017-03-07 09:42:28

标签: android spinner

我在AlertDialog中使用Spinner作为过滤器。当我在选择项目后重新打开对话框时,我想默认选择之前选择的项目。但是某种魔法正在发生,我无法理解为什么微调器正在选择错误的项目。微调器的项列表是一个字符串数组,编号从4到42 Background 当我选择第一项{"4","6",.."42"}时,位置应为0,当我重新打开对话框时,应显示确切的项目。但相反,它会在第4位显示项"4"

Code Dialogfragment:

"10"

我在听众中制作了两个Toast。疯狂的是,在OnItemSelectedListener中显示正确的位置值。在PositiveButton OnClickListener中显示错误的值。你知道吗?

2 个答案:

答案 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);