在 Android 中动态禁用微调器项目
Posted
技术标签:
【中文标题】在 Android 中动态禁用微调器项目【英文标题】:Disabling dynamically a spinner item in Android 【发布时间】:2020-04-06 17:03:03 【问题描述】:对于我们的项目,我需要实现以下内容:当在另一个微调器中选择相同的项目时禁用微调器项目(反之亦然)。关于如何处理它的任何想法,或者是否已经存在这样的实现(可能在适配器或 Spinner 类中)?
【问题讨论】:
这可能会有所帮助:***.com/questions/29474829/… @CésarFerreira 谢谢!但是,这个没有显示对一组项目中单个项目的操作,而只是为第二个微调器插入另一个列表(动态)。 覆盖 onOptionsItemSelected 并通过对特定微调器应用检查返回 true。 【参考方案1】:我了解两个微调器具有相同的项目列表,因此您可以设置第一个并获取位置并在第二个微调器中自动禁用该位置。
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);
【讨论】:
谢谢!这有效,但这不是动态设置的。你会在什么时候检查某个微调器是否应该禁用某些项目 - 知道某个项目已被禁用,如果它在另一个微调器上被选中(反之亦然)?以上是关于在 Android 中动态禁用微调器项目的主要内容,如果未能解决你的问题,请参考以下文章