Android - Как отключить определенный элемент для нескольких счетчиков в одном действии

У меня есть три блесны в одном действии. Как отключить элемент, выбранный из каждого счетчика, на соответствующий счетчик?

Я установил данные в массив строк в 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