2016-06-21 17 views
0

Ich habe eine Liste der Farbe gemacht und ich möchte die Farbe des Textes von TextView ändern, die ID "Name des Benutzers" hat sobald jemand klicken Sie auf einen der das Element der Liste .Ich folgenden Code versucht, aber es funktioniert nicht .Ich nicht in der Lage bin, um herauszufinden, was in den folgenden Code falsch ist:Wie man die Farbe des Textes von TextView in android entsprechend der gewählten Farbe ändert, ausgewählt von einer Liste der Farbe

public class UserInformation extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_user_information); 
     Bundle app = getIntent().getExtras(); 
     if (app == null) { 
      return; 
     } 
     final TextView Name = (TextView) findViewById(R.id.NameOfUser);//refernce to textview 
     Name.setText(app.getString("user_information")); 

     String[] color = {"Blue", "Red", "Green"}; 
     ListAdapter mylist = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, color); 
     ListView renuList = (ListView) findViewById(R.id.Mylist); 
     renuList.setAdapter(mylist); 

     renuList.setOnItemClickListener(
       new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { 
         String item = String.valueOf(adapterView.getItemIdAtPosition(i)); 
         if (item == "Green") {      
          Name.setTextColor(Color.GREEN);// suppose I want to set the color to green if green is selected 
         } 
        } 
       } 
     ); 
} 
+0

Kennen Sie solche Java-Grundlagen wie Strings in Java zu vergleichen? – Selvin

+0

Verwenden Sie ContextCompat.getColor (Kontext, R.color.XXX) für Farben !!! – XxGoliathusxX

Antwort

1

Problem 1:

Scheint wie Sie rufen getItemIdAtPosition() anstelle von getItemAtPosition().

Angenommen, Sie möchten, dass die Daten von Ihrem Adapter an der angegebenen Position bekommen, sollten Sie folgendes ändern:

String item = String.valueOf(adapterView.getItemIdAtPosition(i)); 

An:

String item = (String) adapterView.getItemAtPosition(i); 

Problem 2:

Ein weiteres Problem ist, dass Sie Ihre (angeblich) Zeichenfolgen mit dem Operator == vergleichen.

Der Operator == prüft die Referenzgleichheit beim Vergleichen von Objekten (String ist eine Object) und Sie müssen die Gleichheit der Werte hier überprüfen.

Statt dessen:

if (item == "Green") { 

Sie könnten dies tun wollen:

if ("Green".equals(item)) { 

Aus der Dokumentation von String.equals():

boolean equals (Object anObject)

Vergleicht diese Zeichenfolge an das angegebene Objekt . Das Ergebnis ist wahr, wenn und nur wenn das Argument nicht null ist und ein String-Objekt ist, das die gleiche Zeichenfolge wie dieses Objekt darstellt.

Auschecken this answer auf String Gleichheit.