android spinner setText 删除了不包含此文本的其他元素- BUG
android spinner setText removes other elements that not contain this text- BUG
我正在从代码中动态添加一组微调器,
到用户控件 - 框架布局类型(使用数据绑定从视图模型设置值),
这是使布局膨胀的功能(我从 Ctor 调用它):
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);
}
}
我试图 select 来自微调器值的特定索引:
spinner.setSelection(s.getIndex());
但是没有用,我找到了解决方案(在堆栈溢出中):
spinner.setText(spinnerArrayAdapter.getItem(s.getIndex()));
这是 select通过字符串值项从微调器中获取一个值。
但这里我有一个非常奇怪的错误:微调器的所有值都变得清晰并且只有包含此字符串的值保留在微调器列表中。
另一个问题是,这导致了此微调器的 颜色 material 设计 消失
有什么想法吗??
我的问题是这样解决的:
我将集合放在 setAdapter 之前的索引中:
spinner.setText(spinnerArrayAdapter.getItem(s.getIndex()));
spinner.setAdapter(spinnerArrayAdapter);
但我仍然认为这是 android 中的错误..
无论如何,关于 material 设计颜色的其他问题与此更改无关..
我正在从代码中动态添加一组微调器, 到用户控件 - 框架布局类型(使用数据绑定从视图模型设置值), 这是使布局膨胀的功能(我从 Ctor 调用它):
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);
}
}
我试图 select 来自微调器值的特定索引:
spinner.setSelection(s.getIndex());
但是没有用,我找到了解决方案(在堆栈溢出中):
spinner.setText(spinnerArrayAdapter.getItem(s.getIndex()));
这是 select通过字符串值项从微调器中获取一个值。 但这里我有一个非常奇怪的错误:微调器的所有值都变得清晰并且只有包含此字符串的值保留在微调器列表中。
另一个问题是,这导致了此微调器的 颜色 material 设计 消失 有什么想法吗??
我的问题是这样解决的: 我将集合放在 setAdapter 之前的索引中:
spinner.setText(spinnerArrayAdapter.getItem(s.getIndex()));
spinner.setAdapter(spinnerArrayAdapter);
但我仍然认为这是 android 中的错误..
无论如何,关于 material 设计颜色的其他问题与此更改无关..