[英]Android - How to Disable Specific Item for Multiple Spinner in One Activity
I have three spinners in one activity.我在一项活动中有三个旋转器。 How to disable an item selected from each spinners to the respective spinner?
如何禁用从每个微调器中选择的项目到相应的微调器?
I have set the data in string array in strings.xml:我在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>
I declared the ArrayAdapter
as below:我声明了
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);
This is my spinner declaration:这是我的微调声明:
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);
I tried to manipulate the spinners in onItemSelected
:我试图操纵
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;
}
}
For example, if user select specific item in spinner one
, I want to make that item disable for spinner 2
and spinner 3
.例如,如果用户 select 特定项目在
spinner one
中,我想让该项目对spinner 2
和spinner 3
禁用。 Same goes when user select specific item in spinner 2
, I want to make that item disable for spinner 1
and spinner 3
.当用户 select 特定项目在
spinner 2
时也是如此,我想让该项目对spinner 1
和spinner 3
禁用。 I hope you understand my question:)我希望你能理解我的问题:)
I think you can have a custom spinner adapter like the following.我认为您可以拥有如下所示的自定义微调器适配器。
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;
}
}
Assign the adapter to each of your spinners.将适配器分配给每个微调器。 Then call the
isEnabled(false)
to the other spinners when one is selected.然后在选择一个时调用
isEnabled(false)
到其他微调器。 Anyway, you have to keep the track of this statuses and make sure that when the first one gets unselected, it sets the others in the enabled state again.无论如何,您必须跟踪此状态并确保当第一个未选中时,它会再次将其他状态设置为启用的 state。
I hope that helps.我希望这会有所帮助。
You need to override ArrayAdapter.getView()您需要覆盖ArrayAdapter.getView()
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.