0

Ich versuche, mit 12 Spalten ein Listview mit einer HashMap und SimpleAdapter von einem verschachtelten Array aufzufüllen und 12 ReihenKann ich ein ListView mit einem verschachtelten Array mit Simpleadapter und hashmap auffüllen?

hier ist also mein Code

try { 
    String [][] array2 = new String[cursor.getCount()][cursor.getColumnCount()]; 
    cursor.moveToFirst(); 
    for (int i =0; i<cursor.getCount();i++){ 
     for(int j = 0; j < cursor.getColumnNames().length; j++) { 
      String uname = cursor.getString(j); 
      array2[i][j]=uname; 
     } 
     cursor.moveToNext(); 
    } 
} finally { 
    cursor.close(); 
} 

und dann die einfachen Adapter mit hashmap

int[] to = new int[]{R.id.item2, R.id.item3, R.id.item4, R.id.item5, R.id.item6, R.id.item7, R.id.item8 ,R.id.item9, R.id.item10, R.id.item11, R.id.item12}; 
List<HashMap<String,String>> fillMaps = (List<HashMap<String, String>>) new ArrayList<HashMap<String, String>>(); 

for(int i = 0; i<10;i++){ 
    HashMap<String,ArrayList> map = new HashMap<String, ArrayList>(); 

} 

SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, R.layout.grid_item, array2, to); 

, wenn ich das versuche bekomme ich einen Fehler

SimpleAdapter(android.content.Context, java.util.List<? extends java.util.Map<java.lang.String,?>>, int, java.lang.String[], int[]) ' in android.widget.SimpleAdapter cannot be applied to (com.example.thevenom1215.prueba.MainActivity, java.util.List<java.util.HashMap<java.lang.String, java.lang.String>>, int, java.util.ArrayList<java.lang.String>, int[])

Oder ich dachte, dass ich das verschachtelte Array in ein einfaches Array konvertieren könnte, ist das möglich? Wenn ja, wie kann ich das erreichen? Ich versuchte dies

String from [] = new String from[252]: 
from[0]= array[0][1]+"|"+array[0][2]+"|"+array[0][3]+......+array[0][12]; 

aber es funktioniert nicht.

Im array2, die array2[12][21] ist, jede Zeile 12 Spalten hat, die Informationen einer Person sind beispiels (name, age)

Cesar Joel Gurrola, xx 

Die erste Zeile des Arrays ist: [Cesar, Joel, Gurrola, xx]

Ich brauche das in einem Array, weil weiter in meinem Code brauche ich String von String und nicht eine ganze String "Cesar, Joel, Gurrola, xx"

Sql quer y

sql="select b.CVE_CONTR, r.NO_RECIBO , a.NOM_SOLICIT ,r.NO_PARCIAL ,r.SDO_TOTAL, r.STS_PAGO ,a.AP_PATSOLICIT,a.AP_MATSOLICIT, " + 
          "f.DESCRIPCION, b.NO_PARCIALID , b.PAGO_PARCIAL, b.TOT_APAG from MFRF_M_SOLICITANTES a, MFRF_M_CONTPREV_H b, MFRF_M_CONTPREV_D_RECGEN_2 r," + 
          "C_PAQUETE f , C_PARCIALIDADES g, MFRF_C_COLONIAS c where b.CVE_CONTR = '"+etnumcontrato.getText().toString() + "' and r.STS_PAGO in ('1','10','11','12')" + 
          "and c.ID_COLONIA = a.ID_COLONIA and f.ID_PAQUETE = b.ID_PAQUETE and g.ID_PARCIALIDAD = b.ID_PARCIAL AND a.ID_SOLICIT = b.ID_SOLICITANTE "; 
+0

Erstens, warum machst du das? Verwenden Sie eine Java-Klasse mit Ihren 12 Feldern.Und laden Sie diese in einen 'ArrayAdapter'. –

+0

Zweitens sollten Sie sehen, dass der' array2' Parameter, den Sie angegeben haben, ein 'String []' sein muss, keine Arraylist oder ein 2D Array. –

+0

Und letzten 'neuen String von [252]:' ist nicht korrekt Java-Syntax. 'new String [252]:' ist. –

Antwort

0

Insgesamt würde ich das nicht empfehlen.

String [][] array2 = new String[cursor.getCount()][cursor.getColumnCount()]; 

Ein Adapter zeigt einen Zeilen Element zu einem Zeitpunkt, nicht die gesamte Tabelle.


würde ich stattdessen ein CursorAdapter empfehlen, da Sie ein Cursor Objekt zu tun haben, aber ich werde mit einem SimpleAdapter fortzusetzen.

Zuerst müssen Sie ein XML-Layout erstellen, lassen Sie es item_layout.xml heißen. Es enthält alle Ansichten, an die Sie die Zeile von der Datenbank binden möchten. Ich glaube, das alles müssen TextViews für einen SimpleAdapter sein.

String[] from = new String[] {"rowid", "fname", "mname", "lname"}; 
int[] to = new int[] { R.id.item1, R.id.item2, R.id.item3, R.id.item4 }; 

Dann Schleife über die Zeilen des Cursors, und ziehen Sie die notwendigen Informationen in einer Liste von HashMaps. Hinweis: Dies ist eine Zeile von Daten jedes Mal, wenn wir über die Cursor-Ergebnisse Schleife sind. Und wie bereits erwähnt, haben Sie nur TextViews, so dass Sie nur String-Werte speichern können.

Jetzt, da Sie alle Zeilen der Daten durchlaufen haben und mit diesen Daten zufrieden sind, legen Sie nur den Adapter fest.

SimpleAdapter adapter = new SimpleAdapter(this, fillMaps, 
     R.layout.item_layout, 
     from, to); 
listView.setAdapter(adapter); 
+0

Ich habe das versucht, aber gibt mir einen Fehler: Index -1 angefordert, mit einer Größe von 21 –

+0

Willst du beschreibender als das sein? Ich bin bereit, den Beitrag zu bearbeiten, wenn Sie mir sagen, welcher Fehler das verursacht. –

+0

@CesarJoelGurrola Richtig ... 'cursor.getColumnIndexOrThrow' muss einen korrekten Spaltennamen von der Datenbank erhalten. Sie haben Ihr Schema nicht angezeigt, Sie können diese Antwort also nicht einfach so kopieren, wie sie ist. –

Verwandte Themen