android - 在Android中动态禁用微调器项目
问题描述
对于我们的项目,我需要实现以下内容:当在另一个微调器中选择相同的项目时禁用微调器项目(反之亦然)。关于如何处理它的任何想法,或者是否已经存在这样的实现(可能在适配器或 Spinner 类中)?
解决方案
我知道两个微调器具有相同的项目列表,因此您可以设置第一个并获取位置并在第二个微调器中自动禁用该位置。
public class MainActivity extends AppCompatActivity {
int selectedItemSpinner1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Items in the two Spinners
String[] languages = new String[]{
"English",
"French",
"German",
"Spanish",
"Italien"
};
List<String> languagesList = new ArrayList<>(Arrays.asList(languages));
// Set the spinner 1 and get the selected value position
Spinner spinner1 = findViewById(R.id.spinner1);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,R.layout.support_simple_spinner_dropdown_item,languagesList);
spinner1.setAdapter(adapter);
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
selectedItemSpinner1 = position;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
// Set the spinner 2 and disable the position
Spinner spinner2 = findViewById(R.id.spinner2);
ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(this,R.layout.spinner_item,languagesList){
@Override
public boolean isEnabled(int position){
if(position == selectedItemSpinner1)
{ return false;
}
else
{
return true;
}
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view = super.getDropDownView(position, convertView, parent);
TextView tv = (TextView) view;
if(position==selectedItemSpinner1) {
// Set the disable item text color
tv.setTextColor(Color.GRAY);
}
else {
tv.setTextColor(Color.BLACK);
}
return view;
}
};
spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
spinner2.setAdapter(spinnerArrayAdapter);
}
推荐阅读
- rust - 如何正确实施 Deref + DerefMut?
- docker - 无法从主机按名称 ping docker 容器
- python - Kivy AttributeError:“NoneType”对象没有“当前”属性
- django - Django orm中的LEAD和LAG窗口功能,如何应用于单个对象?
- python - 如何在 with 语句中将文件名作为变量处理
- python - Python urllib 属性错误
- javascript - Rails - 重叠的 Openlayers 地图
- microservices - 尝试连接 Eureka 和 Zuul 时出现错误
- html - 如何将下拉项移动到页面的右端
- dart - 为什么有些 Dart 内置类型以大写字母 (List, Map, String) 开头,而另一些则以小写字母 (number, int, double, bool) 开头?