I'm trying to show a Listview
with Custom ArrayAdapter and i don't know what is my error. The console show this error:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.registro/com.example.registro.MainActivity}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'.
Can someone help me. Thank you
MainActivity.java
public class MainActivity extends ListActivity {
private ListView List_View;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
List_View = (ListView) findViewById(R.id.list);
}
public void VerTabla (View view) {
AdminBD admin = new AdminBD(this, "BaseDatos", null, 1);
SQLiteDatabase BaseDatos = admin.getWritableDatabase();
ArrayList<DataUsuario> contenidoTabla = new ArrayList<DataUsuario>();
try {
Cursor fila = BaseDatos.rawQuery("select dni, nombre, telefono from usuario", null);
for(fila.moveToFirst(); !fila.isAfterLast(); fila.moveToNext()) {
DataUsuario user = new DataUsuario(
fila.getString(0),
fila.getString(1),
fila.getInt(2)
);
contenidoTabla.add(user);
}
UsuarioAdapter myAdp = new UsuarioAdapter(this, R.layout.persona_fila_layout, contenidoTabla);
List_View.setAdapter(myAdp);
}catch(Exception e){
e.printStackTrace();
} finally {
BaseDatos.close();
}
}
}
DataUsuario.java
package com.example.registro;
public class DataUsuario {
private String dni;
private String nombre;
private Integer telefono;
public DataUsuario() {
super();
}
public DataUsuario(String dni, String nombre, Integer telefono ) {
super();
this.dni = dni;
this.nombre = nombre;
this.telefono = telefono;
}
public String getDni() {
return dni;
}
public void setDni(String dni) {
this.dni = dni;
}
public String getNombre() {
return nombre;
}
public void setNombre(String dni) {
this.nombre = nombre;
}
public Integer getTelefono() {
return telefono;
}
public void setTelefono(Integer telefono) {
this.telefono = telefono;
}
@Override
public String toString() {
return this.dni + " - " + this.nombre + " - " + this.telefono;
}
}
UsuarioAdapter.java
public class UsuarioAdapter extends ArrayAdapter<DataUsuario> {
private ArrayList<DataUsuario> usuarios;
private int resourceLayout;
private Context mContext;
public UsuarioAdapter(Context context, int textViewResourceId, ArrayList<DataUsuario> usuarios) {
super(context, textViewResourceId, usuarios);
this.resourceLayout = textViewResourceId;
this.mContext = context;
this.usuarios = usuarios;
}
public View getView(int position, View convertView, ViewGroup parent){
View v = convertView;
if (v == null) {
LayoutInflater vi;
vi = LayoutInflater.from(mContext);
v = vi.inflate(resourceLayout, null);
}
DataUsuario i = usuarios.get(position);
if (i != null) {
TextView dnitag = (TextView) v.findViewById(R.id.dnitag);
TextView dnidata = (TextView) v.findViewById(R.id.dnidata);
TextView nombretag = (TextView) v.findViewById(R.id.nombretag);
TextView nombredata = (TextView) v.findViewById(R.id.nombredata);
TextView telefonotag = (TextView) v.findViewById(R.id.telefonotag);
TextView telefonodata = (TextView) v.findViewById(R.id.telefonodata);
// Chequeamos que los textview existan y los rellenamos
if (dnitag != null){
dnitag.setText("Dni: ");
}
if (dnidata != null){
dnidata.setText(i.getDni());
}
if (nombretag != null){
nombretag.setText("Nombre: ");
}
if (nombredata != null){
nombredata.setText(i.getNombre());
}
if (telefonotag != null){
telefonotag.setText("Teléfono: ");
}
if (telefonodata != null){
telefonodata.setText(i.getTelefono());
}
}
return v;
}
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">
<Button
android:id="@+id/button3"
android:layout_width="121dp"
android:layout_height="wrap_content"
android:onClick="VerTabla"
android:text="Ver tabla" />
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
persona_fila_layout.xml
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<!-- Dni Tag -->
<TextView
android:id="@+id/dnitag"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<!-- Dni Data -->
<TextView
android:id="@+id/dnidata"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<!-- Nombre Tag -->
<TextView
android:id="@+id/nombretag"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<!-- Nombre Data -->
<TextView
android:id="@+id/nombredata"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<!-- Telefono Tag -->
<TextView
android:id="@+id/telefonotag"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<!-- Telefono data -->
<TextView
android:id="@+id/telefonodata"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
You can't use android:id="@+id/list"
.
In your layout use:
<ListView
android:id="@android:id/list"
.....
/>
Check the official doc:
To do this, your own view MUST contain a
ListView
object with the id"@android:id/list"
(or R.id.list if it's in code)