簡體   English   中英

Android Java-Dropdown微調器始終設置相同的文本,只希望更改背景顏色

[英]Android Java - Dropdown spinner sets the same text always, only want to change background color

我有2個下拉式微調框,我想按顏色進行編碼。 我希望1個始終被標記為Apple,另一個被標記為Banana。 我正在使用下拉菜單更改微調器的背景顏色。 如何設置文本始終保留為Apple和Banana,但僅根據選擇的內容更改微調框的背景顏色? 每當我使用下拉菜單選擇一種顏色時,它將文本更改為我選擇的顏色。 我覺得我需要在某個地方使用setText函數...

到目前為止,這是我的代碼:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    dropdown1 = (Spinner)findViewById(R.id.spinner1);
    dropdown2 = (Spinner)findViewById(R.id.spinner2);

    String[] colors = new String []{"red", "blue", "green"};

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_dropdown_item, colors);

    dropdown1.setAdapter(adapter);
    dropdown2.setAdapter(adapter);

    dropdown1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            text1 = dropdown1.getSelectedItem().toString();

            if (text1.equals("red")) {
                dropdown1.setBackgroundColor(Color.parseColor("#ff0000"));
            } else if (text1.equals("green")) {
                dropdown1.setBackgroundColor(Color.parseColor("#00ff00"));
            } else if (text1.equals("blue")) {
                dropdown1.setBackgroundColor(Color.parseColor("#0000ff"));
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {

        }

    });

添加以下代碼,

dropdown1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) {
            text1 = dropdown1.getSelectedItem().toString();

            if (text1.equals("red")) {
                dropdown1.setBackgroundColor(Color.parseColor("#ff0000"));
                adapter.notifyDataSetChanged();
            } else if (text1.equals("green")) {
                dropdown1.setBackgroundColor(Color.parseColor("#00ff00"));
                adapter.notifyDataSetChanged();
            } else if (text1.equals("blue")) {
                dropdown1.setBackgroundColor(Color.parseColor("#0000ff"));
                adapter.notifyDataSetChanged();
            }
        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {

        }

    });

希望我能正確理解您的問題。 馬上,

String[] colors = new String []{"red", "blue", "green"};

是微調器文本,因此您要將其更改為:

String[] colors = new String []{ "Apple", "Apple", "Apple" };

接下來,代替

text1 = dropdown1.getSelectedItem().toString();

更改為:

int color = dropdown1.getSelectedItemPosition();

我建議使用常量或枚舉表示所需的顏色。

我認為有更好的解決方案(不使用微調器),但是希望在沒有上下文的情況下,這就是您想要的。

請注意,所選項目已經作為參數傳遞給onItemSelected() ,因此無需調用getSelectedItem() 其次,所選項目是View ,因此在其上調用toString()給出View對象的文本表示形式 這與在視圖中顯示的文本不同。 相反,您需要調用getText() 將所有這些放在一起意味着您應該改變

text1 = dropdown1.getSelectedItem().toString();

String text = selectedItemView.getText().toString()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM