2016-06-10 13 views
0

Ich möchte den Hintergrund eines TextView ändern, der in einem ListView eingefügt wird. Das ListView enthält eine Reihe von TextView und der Wert von jedem wird aus einer einfachen Liste abgerufen. Jetzt zeige ich Ihnen meine Schnipsel:Wenn ListView bereit ist?

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.town_selection); 
    list = (ListView) findViewById(R.id.list); 
    adapter = new ArrayAdapter<>(this, R.layout.string_item, App.towns); 
    list.setAdapter(adapter); 
    list.setOnItemClickListener(this); 
    adapter.notifyDataSetChanged(); 
    list.invalidate(); 

    // list.getCount() returns zero!! 
    // and so, list.getChildAt(...) returns null!! 
} 

App.towns ist die Liste der String ich sprach, und dessen Länge größer ist als 0. Wenn die App läuft es in Ordnung scheint, weil die Listview die Elemente zeigt , aber am Ende von onCreate muss ich die Hintergrundfarbe einiger Elemente ändern, aber die ListView scheint nicht bereit zu sein, da ich sie kommentiert habe.

notifyDataSetChanged() und invalidate() hilft nicht.

Antwort

1

Ich behaupte nicht, dass meine Antwort die beste ist, aber ich habe eine Idee, und ich würde es gerne teilen.

Wenn Ihre String-Liste von Städten, wie ich verstanden, unveränderbar ist wir wie folgt vor:

... 

     final Context context = this;  
     String [] towns = new String [] { "town_1", "town_2", "town_3" }; 

     ListView list; 
     ArrayAdapter<String> adapter; 

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

       list = (ListView) findViewById(R.id.list); 
       adapter = new ArrayAdapter<String>(this, R.layout.string_item, R.id.string_item_text, towns) 
       //R.id.string_item_text - id your TextView in item of your list 
        { 
         @Override 
         public View getView(int position, View convertView, ViewGroup parent) { 
         View v = super.getView(position, convertView, parent); 
         TextView txtView = (TextView) v.findViewById(R.id.string_item_text); 
         String sText = txtView.getText().toString(); 
         if (sText.equals("town_1")) { 
         txtView.setBackgroundColor(Color.parseColor("#93C47D")); //#93C47D - just example 
         } else if (sText.equals("town_2")){ 
         txtView.setBackgroundColor(Color.parseColor("#6FA8DC")); //#6FA8DC - just example 
         } else if (sText.equals("town_3")){ 
         txtView.setBackgroundColor(Color.parseColor("#F6B26B"));//#F6B26B - just example 
         } 
        return v; 
        } 
       }; 

      list.setAdapter(adapter); 

... 

Es half mir in einem Android-Projekten. Wenn es dir hilft, wird es gut sein. In irgendeiner Weise, lassen Sie Ihr Feedback.

1

Sie müssen einen benutzerdefinierten Adapter für Ihre Listenansicht schreiben und die Farbe beim Erstellen jedes Elements in der Listenansicht ändern.

Diese SO question - Custom Adapter for List View hat gute Antworten, die Ihnen helfen sollten, wie dieser benutzerdefinierte Adapter erstellt wird. Sie können es nicht mit der ArrayAdapter wie es ist tun.

1

Die beste Lösung ist eine benutzerdefinierte Adapter statt ArrayAdapter zu verwenden, dann im getView() -Methode von benutzerdefinierten Adapter können Sie die Farbe des Textview ändern

1

Wenn aus irgendeinem Grund müssen Sie ändern Hintergrund ist TextViev, die Informationen darüber sollten irgendwo gespeichert werden und ändern Sie den Hintergrund verwendet Methoden in Ihrem benutzerdefinierten Adapter. Erstellen Sie Ihren eigenen benutzerdefinierten Adapter.

Verwandte Themen