Android - Как да деактивирате конкретен елемент за множество Spinner в една дейност

Имам три спинера в една дейност. Как да деактивирам елемент, избран от всеки спинър към съответния спинер?

Зададох данните в масив от низове в 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;
    }
}

Например, ако потребителят избере конкретен елемент в spinner one, искам да направя този елемент деактивиран за spinner 2 и spinner 3. Същото важи, когато потребителят избере конкретен елемент в spinner 2, искам да направя този елемент деактивиран за spinner 1 и spinner 3. Надявам се, че разбирате въпроса ми :)


person Ahmad Hazman    schedule 10.11.2019    source източник
comment
Бихте ли споделили какъв резултат имате сега?   -  person Arul Mani    schedule 10.11.2019
comment
@ArulMani това е моя вид изход ibb.co/m9h5BY8   -  person Ahmad Hazman    schedule 10.11.2019


Отговори (2)


Мисля, че можете да имате персонализиран адаптер за центрофуга като следния.

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) на другите спинери, когато някой бъде избран. Както и да е, трябва да следите тези състояния и да се уверите, че когато първият бъде отменен, той поставя останалите отново в активирано състояние.

Надявам се това да помогне.

person Reaz Murshed    schedule 10.11.2019

Трябва да замените 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
   } 
}
person peterchaula    schedule 10.11.2019