Poner subitem en un listview

publicado por: Anonymous

Hola buenas quisiera poner un subitem en mi listview pero no lo consigo.
Este es mi activity_list

<?xml version="1.0" encoding="utf-8"?>

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

Esta es mi clase lista

public class Lista extends AppCompatActivity {

ListView lv ;
ArrayList<String> lista;
ArrayAdapter adaptador;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lista);
    lv = (ListView)findViewById(R.id.lista);
    DbHelper db = new DbHelper(getApplicationContext(),null,null,1);
    lista = db.llenar_lv();
    adaptador = new ArrayAdapter(this, android.R.layout.simple_list_item_1,lista);
    lv.setAdapter(adaptador);


}

}

Y este es el metodo llenas_lv

    public ArrayList llenar_lv(){
    ArrayList<String> lista = new ArrayList<>();
    SQLiteDatabase db = this.getWritableDatabase();
    String q = "SELECT * FROM users";
    Cursor registros = db.rawQuery(q,null);
    registros.moveToFirst();

        while(registros.moveToNext()){
            lista.add(registros.getString(1));
            lista.add(registros.getString(2));

        }


    return lista;
}

Imagen quiero que me salga el subitem pero no lo consigo solo me sale del item 1

introducir la descripción de la imagen aquí

Error en el SimpleAdapter
introducir la descripción de la imagen aquí

solución

Si podrías hacerlo sin necesidad de un Custom adapter, pero tienes que trabajar tu data.

Te quedaría algo así:

List<Map<String, String>> data = new ArrayList<Map<String, String>>();
     while(registros.moveToNext()){
     Map<String, String> datum = new HashMap<String, String>(2);
        datum.put("datos1", registros.getString(1));
        datum.put("datos2", registros.getString(2));
        data.add(datum);
            }

    }
    SimpleAdapter adapter = new SimpleAdapter(this, data,
                                              android.R.layout.simple_list_item_2,
                                              new String[] {"datos1", "datos2"},
                                              new int[] {android.R.id.text1,
                                                         android.R.id.text2});
    itemList.setAdapter(adapter);

Aquí tienes más info sobre el SimpleAdapter :
SimpleAdapter

UPDATE

Actualizando tu código quedaría así :

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_lista);
    lv = (ListView)findViewById(R.id.lista);
    DbHelper db = new DbHelper(getApplicationContext(),null,null,1);
    List<Map<String, String>> data = db.llenar_lv();
   SimpleAdapter adapter = new SimpleAdapter(this, data,
                                              android.R.layout.simple_list_item_2,
                                              new String[] {"datos1", "datos2"},
                                              new int[] {android.R.id.text1,
                                                         android.R.id.text2});
    lv.setAdapter(adapter);


}



    public List<Map<String, String>> llenar_lv(){
    ArrayList<String> lista = new ArrayList<>();
    SQLiteDatabase db = this.getWritableDatabase();
    String q = "SELECT * FROM users";
    Cursor registros = db.rawQuery(q,null);
    registros.moveToFirst();

       List<Map<String, String>> data = new ArrayList<Map<String, String>>();
     while(registros.moveToNext()){
     Map<String, String> datum = new HashMap<String, String>(2);
        datum.put("datos1", registros.getString(1));
        datum.put("datos2", registros.getString(2));
        data.add(datum);
            }
       return data;
    }
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *