2017-09-05 4 views
0

Ich muss zugeben, dass die Theorie der Adapter mir nicht völlig klar ist. In meiner App habe ich ListView mit Parkplatznummern erstellt und möchte eine Textfarbe basierend auf ihrer Verfügbarkeit ändern. ListView-Elemente erhalten Zahlen aus dem Array mit "Dock" -Objekten, wobei jeder DockPlace über die ID (Nummer) und den Verfügbarkeitsstatus verfügt. Mein Adapter kann Zahlen aus dem Dock-Objekt übernehmen und in ListView einfügen. Es kann auch Textfarbe ändern, aber ich habe keine Ahnung, wie ich andere Parameter über Objekte erhalten kann.Wie kann der Adapter andere Parameter vom Array mit Objekten an Listview senden?

Adapter:

ListView docksList = (ListView) findViewById(R.id.docksList); 
    ArrayAdapter<Dock> listAdapter = new ArrayAdapter<Dock>(
      this, 
      android.R.layout.simple_list_item_1, 
      Dock.docks //Dock - class name. docks - name of array with Dock Objects 
    ) { 
     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      View view = super.getView(position, convertView, parent); 
      TextView text = (TextView) view.findViewById(android.R.id.text1); 

      //in this place could be IF statement which check status of dock and can change text color depends on its 

      text.setTextColor(Color.BLUE); 

      return view; 
     } 
    }; 

Dock:

public static final Dock[] docks = { 
    new Dock(1, true), 
    new Dock(2, true), 
    new Dock(3, false), 
}; 
private Dock(int number, boolean isAvailable) { 
    this.number = number; 
    this.isAvailable = isAvailable; 
    } 
public int getNumber() { 
    return number; 
} 
public boolean getStatus() { 
    return isAvailable; 
} 
public String toString() { 
    String numberStr = "Dock no "+ String.valueOf(this.number); 
    return numberStr; 
} 
+0

haben Sie versuchen, wenn sonst, wo Sie innerhalb getView() -Methode kommentiert, wird es funktionieren, wenn Sie es hinzufügen –

+0

boolean availableStatus = listAdapter .get (Position) .getStatus(); überprüfen Sie mit dieser, wenn True Set Farbe –

+0

einfach! machen Sie eine Schleife, um das Array zu iterieren, um die Indizes zu nehmen, die Listenansicht Felder Positionen werden die gleichen mit Ihrem Array so listView.get (Position) ist gleich Docks.get (Position) auf diese Weise können Sie erhalten das vollständige Objekt, selbst wenn die Liste nicht mit dem vollständigen Objekt ausgeführt wird –

Antwort

0

ArrayAdapter ist nur eine konkrete Umsetzung der ListAdapter-Schnittstelle; Es gibt auch BaseAdapter und alles, was Sie selbst implementieren möchten.

ArrayAdapter macht einen ziemlich guten Job, all die harte Arbeit, die es tut, zu verbergen, aber in diesem Fall ist etwas von dem, was vor dir verborgen ist, genau das, was du brauchst.

Wenn Sie Ihren Adapter mit diesem Code erstellen:

ArrayAdapter<Dock> listAdapter = new ArrayAdapter<Dock>(
     this, 
     android.R.layout.simple_list_item_1, 
     Dock.docks //Dock - class name. docks - name of array with Dock Objects 
) 

die wichtige Sache zu verstehen ist, dass Ihr Adapter Dock.docks als seinen eigenen privaten Bereich zu halten, wird (benannt mObjects) und dass es Möglichkeiten gibt, Sie können auf dieses Feld in Ihrem eigenen Code zugreifen.

Sie können die Werte an den Adapter hinzufügen, mit add(), addAll(), insert(), etc. Sie Objekte entfernen remove() oder clear() verwenden. Und die eine, die für Sie relevant ist: Sie können auf das Objekt unter position zugreifen, indem Sie getItem() verwenden.

Da die position in der getView() Methode verfügbar ist, bedeutet dies, dass Sie auf das "aktuelle" Objekt Dock ganz einfach zugreifen können. Vielleicht könnten Sie diesen Code verwenden:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = super.getView(position, convertView, parent); 
     TextView text = (TextView) view.findViewById(android.R.id.text1); 

     if (getItem(position).getStatus()) { 
      text.setTextColor(Color.BLUE); 
     } 
     else { 
      text.setTextColor(Color.BLACK); 
     } 

     return view; 
    } 
0

Sie können getItem verwenden (Position) Funktion von ArrayAdapter Klasse zum Beispiel von Dock-Objekt an bestimmten Position zu bekommen.

public View getView(int position, View convertView, ViewGroup parent) { 
     Dock dock= getItem(position); 
     // do your stuff 
    } 
Verwandte Themen