2017-03-07 120 views
1

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

代码Dialogfragment项目"10"

public class FittingSelectionDialogFragment extends DialogFragment { 

private String dTitle; 

    private String[] list; 

    private int position; 

    private String filterItem; 

    private List<String> chosenFilterItems; 

    public interface FittingSelectionDialogListener { 
     public void onChosenDialogItem(String filterStrings,int menuPosition); 
    } 

    FittingSelectionDialogListener mListener; 


    public Dialog onCreateDialog(Bundle savedInstanceState){ 
      final Spinner spinner2 = new Spinner(getActivity()); 
      final TextView label = new TextView(getActivity()); 
      final TextView label2 = new TextView(getActivity()); 
      LinearLayout layout = new LinearLayout(getActivity()); 

      layout.setOrientation(LinearLayout.HORIZONTAL); 
      layout.setGravity(Gravity.CENTER); 

      ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(getContext(), R.layout.support_simple_spinner_dropdown_item, list); 
      spinner2.setAdapter(adapter2); 

      if(chosenFilterItems.get(position).equals("")) { 
       spinner2.setSelection(0); 
      } 
      else{ 
       spinner2.setSelection(Integer.valueOf(chosenFilterItems.get(position))); 
      } 

      label.setText("Rohr AD:"); 
      label.setTextColor(getResources().getColor(R.color.colorParkerBlack2)); 
      label.setTextSize(16); 

      label.setPadding(60,0,40,0); 

      label2.setText("mm"); 
      label2.setTextSize(16); 
      label2.setTextColor(getResources().getColor(R.color.colorParkerBlack2)); 

      dialog.setTitle(getdTitle()); 

      layout.addView(label); 
      layout.addView(spinner2); 
      layout.addView(label2); 

      dialog.setView(layout); 

      spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
       @Override 
       public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int spinner2Position, long id) { 
        filterItem = list[spinner2Position]; 
        chosenFilterItems.set(position,String.valueOf(spinner2Position)); 
        Toast.makeText(getContext(),chosenFilterItems.get(position),Toast.LENGTH_SHORT).show(); //correct value 
       } 

       @Override 
       public void onNothingSelected(AdapterView<?> adapterView) { 

       } 
      }); 
      dialog.setPositiveButton("Bestätigen", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        mListener.onChosenDialogItem(filterItem,position); 
        Toast.makeText(getContext(),chosenFilterItems.get(position),Toast.LENGTH_SHORT).show();//wrong value 
        dismiss(); 
       } 
      }); 
      dialog.setNegativeButton("Abbrechen", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialogInterface, int i) { 
        filterItem = ""; 
        chosenFilterItems.set(position,""); 
        mListener.onChosenDialogItem(filterItem, position); 
       } 
      }); 
      return dialog.create(); 
    } 
} 

我做了两个敬酒听众里面。疯狂的是,在OnItemSelectedListener中显示正确的位置值。在PositiveButton中,OnClickListener显示错误的值。你有什么想法吗?

+0

走进调试器,看看发生了什么事情。如果没有这样做很难。 – Vucko

+0

我看到你使用列表作为地图。为什么不使用map/HashMap呢? – gvlachakis

回答

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); 
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(); 
} 
});