2012-04-02 13 views
2

Ich habe Daten von einem WS, die auf einem Android ListView angezeigt werden müssen. Daten können unterschiedlicher Art sein, daher muss ich dynamisch ein Layout für ListView-Elemente erstellen, wie kann ich das tun? Ich denke, ich muss LayoutInFlater verwenden, habe es aber immer mit vorhandenen Layouts verwendet und nie ein Layout von Grund auf neu erstellt. Wie kann ich es tun?Listview-Elemente programmgesteuert in Android erstellen

Antwort

2

benötigen Sie Adapter für die

zu erstellen, diesen Link überprüfen alles über die Verwendung von Adaptern erarbeiten.

http://www.vogella.de/articles/AndroidListView/article.html

//

bearbeitet gerade

in der angegebenen URL diesen Code überprüfen

import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class MySimpleArrayAdapter extends ArrayAdapter<String> { 
    private final Context context; 
    private final String[] values; 

    public MySimpleArrayAdapter(Context context, String[] values) { 
     super(context, R.layout.rowlayout, values); 
     this.context = context; 
     this.values = values; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     LayoutInflater inflater = (LayoutInflater) context 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View rowView = inflater.inflate(R.layout.rowlayout, parent, false); 
     TextView textView = (TextView) rowView.findViewById(R.id.label); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.icon); 
     textView.setText(values[position]); 
     // Change the icon for Windows and iPhone 
     String s = values[position]; 
     if (s.startsWith("iPhone")) { 
      imageView.setImageResource(R.drawable.no); 
     } else { 
      imageView.setImageResource(R.drawable.ok); 
     } 

     return rowView; 
    } 
} 

wo R.layout.rowlayout ist das Layout für Ihre jede Zeile , in dem Sie festlegen können Ihre Bildansichten, Textansichten

+0

vogella Website hat große Tutorials, kann aber kein Beispiel mit einem Layout von Grund auf neu erstellen, wo Ansichten hinzugefügt hinzugefügt werden; Alle Beispiele, die ich sehe, verwenden ein bereits existierendes XML-Layout, das aufgebläht ist. Ich wollte das vermeiden. – Cris

+0

ok dann warum versuchst du nicht, sie durch ein neues Objekt zu erstellen als ListView list = new ListView (context)); – vipin

+0

Cris, dass die Lösung für dich funktioniert oder nicht ??? – vipin

1

Wie Sie erwähnen, dass Sie verschiedene Datentypen verwenden, nehme ich an, dass Sie differen zeigen möchten t Layouts pro Datentyp. Es ist nicht notwendig, Ihre Listview-Elemente dynamisch zu erstellen. Wenn Sie möchten, können Sie sie einfach aus XML aufblasen.

Erstellen eines benutzerdefinierten listadapter (den Link zu vogella von vipin bereitgestellt sehen) und überschreiben die getView(), getItemViewType() und getViewTypeCount() Methoden.

In getView() erstellen Sie Ihre Ansichten entweder programmgesteuert oder inflationieren sie aus XML. Um festzustellen, welches Layout aufgebläht (oder aufgebaut) werden soll, rufen Sie getItemViewType(position) auf, überprüfen Sie den Wert, den es zurückgibt, und wählen Sie dann aus, welches Layout für diesen Wert aufzublasen ist. Weitere Informationen zum Erstellen von XML-Layouts finden Sie unter this page in the dev guide on XML layouts.

Als nächstes werfen Sie einen Blick auf this answer und implementieren Sie dies in Ihrem Adapter. Achten Sie darauf, auch die Kommentare zu lesen. Zum Beispiel überschreibt getItemViewType() mit so etwas wie:

public int getItemViewType(int position) { 

    if(getItem(position) instanceOf ItemA) { 
     return 0; 
    } else { 
     return 1; 
    } 
} 

Dieser Ansatz Ihre Listenansicht ermöglicht Ansichten zu recyceln und das ViewHolder-Muster verwenden (für weitere Informationen finden Sie erneut auf den Link vipin zur Verfügung gestellt).

Verwandte Themen