简体   繁体   English

Android - 如何在一个活动中禁用多个微调器的特定项目

[英]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 2spinner 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 1spinner 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM