ListView 2 righe e icona per ogni Elemento in Android

Hy,
Voglio aggiungere un’icona e 2 righe in un elemento della ListView. I primi saranno i valori e la seconda sarà values2

String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
            "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
            "Linux", "OS/2" };
String[] values2 = new String[] `enter code here`{ "Android2", "iPhone2",        "WindowsMobile2",
            "Blackberry2", "WebOS2", "Ubuntu2", "Windows72", "Max OS  X2",
            "Linux2", "OS/22" };

Mio xml per la lista è :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

<ListView
    android:id="@+id/list"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" >
</ListView>

</LinearLayout>

Mio xml per ogni riga è :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >

<ImageView
    android:id="@+id/icon"
    android:layout_width="22px"
    android:layout_height="22px"
    android:layout_marginLeft="4px"
    android:layout_marginRight="10px"
    android:layout_marginTop="4px"
    android:src="@drawable/ic_launcher" >
</ImageView>

<TextView
    android:id="@+id/label"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@+id/label"
    android:textSize="20px" />

<TextView
    android:id="@+id/label2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@+id/label" />

</LinearLayout>

E il mio codice è :

 public class listaNoua extends ListActivity {
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
            "Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
            "Linux", "OS/2" };
    String[] values2 = new String[] { "Android2", "iPhone2", "WindowsMobile2",
            "Blackberry2", "WebOS2", "Ubuntu2", "Windows72", "Max OS X2",
            "Linux2", "OS/22" };

    ArrayAdapter<String> adapter = new ArrayAdapter<String>  (this,R.layout.rowlayout, R.id.label2, values2);
    setListAdapter(adapter);

}

Se posso aggiungere :

   ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,R.layout.rowlayout,   R.id.label2, values2 , R.id.label, values);

Il codice non funziona

C’è qualcuno che può aiutarmi ?

vedere simplelistadapter per di più complesso di associazione (in pratica un elenco di id e un elenco di voci (anche se che funziona sui cursori solo, il che comporterebbe l’utilizzo di un matrixcursor da qualche parte)

OriginaleL’autore Razvan | 2012-01-05

3 risposte

  1. 5

    Si dovrebbe utilizzare elenco adattatore personalizzato. È possibile trovare una buona per fare qualche esempio qui

    http://www.learn-android.com/2011/11/22/lots-of-lists-custom-adapter/

    Penso che si dimentica l’orientamento per il LinearLayout a riga XML. Il problema è che lineare layout di default ha orientamento “orizzontale”. La riga dovrebbe essere come di seguito per visualizzare tutte e 3 le voci in elenco.

    <ImageView
        android:id="@+id/icon"
        android:layout_width="22dp"
        android:layout_height="22dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="4dp"
        android:src="@drawable/ic_launcher" >
    </ImageView>
    
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/label"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@+id/label"
            android:textSize="20sp" />
    
        <TextView
            android:id="@+id/label2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@+id/label" />
    </LinearLayout>

    mi dà l’errore costruttore ArrayAdapter<String>(listaNoua, int, int, String[], int, String[]) è indefinita , e il primo testo è falso e secondo testo è quello che dovrebbe essere (android2 , iphone 2)
    È quindi necessario scrivere il tuo è un Adattatore per risolvere questo
    E come dovrei farlo ? Ogni tentativo è fallito
    personalizzare questo adattatore: github.com/thest1/LazyList/blob/master/src/com/fedorvlasov/…
    Ho modificato la mia risposta. Si prega di controllare

    OriginaleL’autore Arslan

  2. 5

    È possibile utilizzare SimpleAdapter per questo.

        List<Map<String, ?>> data = new ArrayList<Map<String, ?>>();
        data.add(createRow("Android", "Android2"));
        data.add(createRow("iPhone", "iPhone"));
    
        String[] from = {"value1", "value2"};
        int[] to = {R.id.label, R.id.label2};
    
        SimpleAdapter adapter = new SimpleAdapter(this, data, R.layout.item_layout, from, to);

    e la funzione per la creazione di una riga

    private Map<String, ?> createRow(String value1, String value2) {
        Map<String, String> row = new HashMap<String, String>();
        row.put("value1", value1);
        row.put("value2", value2);
        return row;
    }

    OriginaleL’autore balazsbalazs

  3. 2

    Android viene fornito già con un layout XML predefinito per questo chiamato simple_list_item_2 quindi non è necessario scrivere il proprio Adattatore o scrivere un file di layout.

    Basta sovrascrivere getView e impostare i valori per la già pre-definito android.R.id.text1 e android.R.id.text2 TextViews già esistenti simple_list_item_2 layout.

    ArrayAdapter<MyObject> adapter = new ArrayAdapter<MyObject>(this, android.R.layout.simple_list_item_2, android.R.id.text1, result) {
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            View view = super.getView(position, convertView, parent);
            TextView text1 = (TextView) view.findViewById(android.R.id.text1);
            TextView text2 = (TextView) view.findViewById(android.R.id.text2);
    
            text1.setText(result.get(position).OperatingSystem);
            text2.setText(result.get(position).Platform);
            return view;
        }
    };
    Grazie, che ha fatto il trucco per me. Si potrebbe far notare che result è di tipo MyObject[] e contiene gli oggetti da aggiungere. In alternativa, si potrebbe cadere questo parametro del tutto, e di aggiungere singoli oggetti con adapter.add() o adapter.addAll(). All’interno getView(), voci di elenco è possibile accedere con getItem(position).

    OriginaleL’autore Fred

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *