簡體   English   中英

Android - 如何在一個活動中禁用多個微調器的特定項目

[英]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 2spinner 3禁用。 當用戶 select 特定項目在spinner 2時也是如此,我想讓該項目對spinner 1spinner 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.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