[英]Android - How to Disable Specific Item for Multiple Spinner in One Activity
我在一项活动中有三个旋转器。 如何禁用从每个微调器中选择的项目到相应的微调器?
我在strings.xml中设置了字符串数组中的数据:
<string-array name="preferences">
<item>American Restaurant</item>
<item>Arabian Restaurant</item>
<item>Asian Restaurant</item>
<item>Chinese Restaurant</item>
<item>Filipino Restaurant</item>
<item>Indonesian Restaurant</item>
<item>Sushi Restaurant</item>
</string-array>
我声明了ArrayAdapter
如下:
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.preferences, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
这是我的微调声明:
spinnerMainPref = findViewById(R.id.main_preference_spinner);
spinnerMainPref.setAdapter(adapter);
spinnerMainPref.setOnItemSelectedListener(this);
spinnerPref2 = findViewById(R.id.preference2_spinner);
spinnerPref2.setAdapter(adapter);
spinnerPref2.setOnItemSelectedListener(this);
spinnerPref3 = findViewById(R.id.preference3_spinner);
spinnerPref3.setAdapter(adapter);
spinnerPref3.setOnItemSelectedListener(this);
我试图操纵onItemSelected
中的微调器:
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
switch (adapterView.getId()) {
case R.id.main_preference_spinner:
String valueMainPref = adapterView.getItemAtPosition(i).toString();
editor.putString("mainPreference", valueMainPref);
editor.putInt("mainPreferenceValuePosition", i);
editor.apply();
break;
case R.id.preference2_spinner:
String valuePref2 = adapterView.getItemAtPosition(i).toString();
editor.putString("secondPreference", valuePref2);
editor.putInt("secondPreferenceValuePosition", i);
editor.apply();
break;
case R.id.preference3_spinner:
String valuePref3 = adapterView.getItemAtPosition(i).toString();
editor.putString("thirdPreference", valuePref3);
editor.putInt("thirdPreferenceValuePosition", i);
editor.apply();
break;
}
}
例如,如果用户 select 特定项目在spinner one
中,我想让该项目对spinner 2
和spinner 3
禁用。 当用户 select 特定项目在spinner 2
时也是如此,我想让该项目对spinner 1
和spinner 3
禁用。 我希望你能理解我的问题:)
我认为您可以拥有如下所示的自定义微调器适配器。
public class MySpinnerAdapter extends BaseAdapter {
@Override
public void isEnabled(int position) {
return getItem(position).isEnabled();
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if(convertView == null) {
convertView = View.inflate(parent.getContext(), R.layout.item, null);
}
if(!isEnabled(position)) {
convertView.setEnabled(false);
convertView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//NO-OP: Just intercept click on disabled item
}
});
}
return convertView;
}
}
将适配器分配给每个微调器。 然后在选择一个时调用isEnabled(false)
到其他微调器。 无论如何,您必须跟踪此状态并确保当第一个未选中时,它会再次将其他状态设置为启用的 state。
我希望这会有所帮助。
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.preferences, android.R.layout.simple_spinner_item){
public View getView(int pos, View convertView, ViewGroup parent) {
//your logic to disable items
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.