[英]Custom ArrayAdapter for a ListView (Android)
I'm trying to show a Listview
with Custom ArrayAdapter and i don't know what is my error.我正在尝试使用自定义 ArrayAdapter 显示Listview
,但我不知道我的错误是什么。 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'. java.lang.RuntimeException: 无法启动活动列表'。
Can someone help me.有人能帮我吗。 Thank you谢谢
MainActivity.java主活动.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 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使用适配器.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活动_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 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>
Your error log is telling you the solution to this:您的错误日志告诉您解决方案:
Your content must have a ListView whose id attribute is 'android.R.id.list'.您的内容必须有一个 id 属性为“android.R.id.list”的 ListView。
Change id of your listview to @android:id/list
like this:像这样将列表视图的 id 更改为@android:id/list
:
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>
You need to do this because you are extending ListActivity
.您需要这样做,因为您正在扩展ListActivity
。 It is not required to do this in any other activity.在任何其他活动中都不需要这样做。
Also please note that since ListActivity is subclass of android.app.Activity
instead of AppCompatActivity, you won't be able to use backward compatibility features provided.另请注意,由于 ListActivity 是android.app.Activity
而不是 AppCompatActivity 的子类,因此您将无法使用提供的向后兼容功能。
If you want to use AppCompat, it is better to add ListView
to the your AppCompatActivity
instead of extending ListActivity
.如果您想使用 AppCompat,最好将ListView
添加到您的AppCompatActivity
而不是扩展ListActivity
。
Edit :编辑:
Also replace the findViewByid()
in your onCreate() since ListActivity already has the function that returns the ListView:还要替换 onCreate() 中的findViewByid()
,因为 ListActivity 已经具有返回 ListView 的函数:
List_View = getListView();
You can't use android:id="@+id/list"
.你不能使用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)为此,您自己的视图必须包含一个 ID 为"@android:id/list"
的ListView
对象(或 R.id.list,如果它在代码中)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.