2016-11-22 5 views
0

Ich habe 2 Dropdown-Spinner, die ich gerne farbcodiert werden würde. Ich möchte, dass 1 immer als Apple und die andere als Banana bezeichnet wird. Ich verwende das Dropdown-Menü, um die Hintergrundfarbe des Spinner zu ändern. Wie lege ich fest, dass der Text immer als "Apple" und "Banana" angezeigt wird, aber nur die Hintergrundfarbe des Spinner basierend auf der ausgewählten Farbe geändert wird? Wenn ich das Dropdown-Menü zur Auswahl einer Farbe verwende, ändert es den Text in die ausgewählte Farbe. Ich fühle mich wie ich irgendwo eine setText Funktion benötigen würde ...Android Java - Dropdown-Spinner setzt den gleichen Text immer, nur um die Hintergrundfarbe zu ändern

Hier ist mein Code so weit:

@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) { 

     } 

    }); 
+0

ändern sollten Was Sie jetzt zu bekommen? –

+0

"Wie lege ich fest, dass der Text immer als" Apple "und" Banana "angezeigt wird, aber nur die Hintergrundfarbe des Drehfelds geändert wird, je nachdem, was ausgewählt ist?" Welcher Text? –

Antwort

1

unten Code hinzufügen,

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) { 

     } 

    }); 
0

Ich hoffe, dass ich richtig Ihre Frage verstanden. Gerade jetzt,

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

Ist der Spinner Text, so dass Sie wollen, es zu ändern:

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

Als nächstes statt

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

Änderung es zu:

int color = dropdown1.getSelectedItemPosition(); 

Ich empfehle, Konstanten oder enums für die Farben zu verwenden du würdest gerne.

Ich denke, es gibt bessere Lösungen (nicht mit einem Spinner), aber ohne Kontext hoffentlich das, was Sie suchen.

+0

Warum der Wechsel zu "Apple"? –

+0

Ich habe die Frage wahrscheinlich nicht richtig verstanden. Er sagte, er wolle den Text immer Apfel oder Banane haben (ich nehme an, er bezog sich auf den Spinner-Drop-down-Text). – IanUme

+0

Ich habe diesen Teil verpasst. Ich verstehe die Frage überhaupt nicht wirklich. –

0

Beachten Sie, dass das ausgewählte Element bereits als Parameter an onItemSelected() übergeben wurde, so dass kein Aufruf von getSelectedItem() erforderlich ist. Zweitens ist das ausgewählte Element ein View, so ruft toString() darauf eine Textdarstellung des View Objekts. Dies ist nicht das Gleiche wie der Text, der die Ansicht anzeigt. Stattdessen müssen Sie getText() anrufen. Putting all dies zusammen bedeutet, dass Sie

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

zu

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