2017-03-05 1 views
0

Ich füge eine Reihe von Spinner dynamisch aus dem Code zu einem Benutzer Steuerelement - Frame-Layout-Typ (mit Datenbindung, um die Werte aus einem Ansichtsmodell festzulegen), ist dies die Funktion des Layouts (ich nenne es vom Ctor) aufzublasen:android Spinner setText entfernt andere Elemente, die diesen Text nicht enthalten- BUG

private void initInflate() { 

     LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     binding = SensorSettingsBinding.inflate(inflater, this, true); 
     binding.linear.setDividerPadding(10); 

     for (SensorSettingViewModel s :Settings) { 
      MaterialBetterSpinner spinner = new MaterialBetterSpinner(getContext()); 
      spinner.setHint(s.getSettingName()); 
      spinner.setHintTextColor(getResources().getColor(R.color.colorHint)); 
      spinner.setMinimumWidth(100); 
      spinner.setFloatingLabelTextSize(40); 
      spinner.setTextSize(15); 
      spinner.setFloatingLabel(MaterialAutoCompleteTextView.FLOATING_LABEL_HIGHLIGHT); 
      spinner.setFloatingLabelText(s.getSettingName()); 
      spinner.setId(s.getId()); 
      ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_dropdown_item, s.getValues()); 
      spinner.setAdapter(spinnerArrayAdapter); 
      spinner.setText(spinnerArrayAdapter.getItem(s.getIndex())); 
//   spinner.setSelection(s.getIndex()); 
      binding.linear.addView(spinner); 

      MarginLayoutParams params = (ViewGroup.MarginLayoutParams)spinner.getLayoutParams(); 
      params.setMargins(30, 0, 30, 0); //substitute parameters for left, top, right, bottom 
      spinner.setLayoutParams(params); 
     } 
    } 

ich einen bestimmten Index aus den Spinner Werte versucht zu wählen:

spinner.setSelection(s.getIndex()); 

aber es didn‘ Ich habe eine Lösung gefunden (im Stack über Fluss):

spinner.setText(spinnerArrayAdapter.getItem(s.getIndex())); 

Dies ist ein Wert aus Spinner von einem String-Wert Element auswählen. aber hier habe ich einen wirklich seltsamen Fehler: alle Werte des Spinner werden klar und nur die Werte, die diese Zeichenfolge enthält bleiben in der Liste der Spinner.

ein anderes Problem ist, dass dies verursacht, die Farbmaterial Design dieses Spinneres verschwindet irgendwelche Ideen ??

Antwort

0

das Problem von mir waren auf diese Weise lösen: Ich legte den Satz auf den Index vor dem den setAdapter:

spinner.setText(spinnerArrayAdapter.getItem(s.getIndex()));  
spinner.setAdapter(spinnerArrayAdapter); 

, aber ich denke immer noch, dass dies ein Fehler in Android ist ..
sowieso die andere Problem mit dem Material Design Farbe ist nicht im Zusammenhang mit dieser Änderung ..

Verwandte Themen