从sqlite数据库中检索多个值,并将其填充到android的listview中
有一位大师 我在寻求帮助。我在互联网上做了很多研究,但都没有结果。我想将获取的所有值添加到listview。我已经设法将值插入数据库并设法获取所有值,但是,我无法将它们添加到listview。 下面的函数工作正常,并以列表形式返回数据从sqlite数据库中检索多个值,并将其填充到android的listview中,android,database,sqlite,Android,Database,Sqlite,有一位大师 我在寻求帮助。我在互联网上做了很多研究,但都没有结果。我想将获取的所有值添加到listview。我已经设法将值插入数据库并设法获取所有值,但是,我无法将它们添加到listview。 下面的函数工作正常,并以列表形式返回数据 public List<Contact> getAllContacts() { List<Contact> contactList = new ArrayList<Contact>(); //
public List<Contact> getAllContacts() {
List<Contact> contactList = new ArrayList<Contact>();
// Select All Query
String selectQuery = "SELECT * FROM " + TABLE_CONTACTS;
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
// looping through all rows and adding to list
if (cursor.moveToFirst()) {
do {
Contact contact = new Contact();
contact.setID(Integer.parseInt(cursor.getString(0)));
contact.setName(cursor.getString(1));
contact.setPhoneNumber(cursor.getString(2));
// Adding contact to list
contactList.add(contact);
} while (cursor.moveToNext());
}
// return contact list
return contactList;
}
不要为每个新项目设置适配器,而是只将联系人列表传递给列表视图适配器一次。如果要添加新项,请添加“添加到现有适配器” 你可以这样做
private void showRecords() {
List<Contact> contacts = db.getAllContacts();
lv.setAdapter(new dataAdapter(this, contacts));
}
public void add(Contact contact) {
if(mContact != null) {
mContact.add(contact);
// This will refresh the list.
notifyDataSetChanged();
}
}
您的getView()方法应该是
public int getCount() {
return mContact.size();
}
public View getView(final int position, View convertView, ViewGroup parent) {
Contact contact = mContact.get(position);
....
....
holder.nameV.setText(contact.getName());
holder.phoneV.setText(contact.getPhone());
....
....
return view;
}
如果您添加到这个现有的适配器中,请添加如下自定义方法
private void showRecords() {
List<Contact> contacts = db.getAllContacts();
lv.setAdapter(new dataAdapter(this, contacts));
}
public void add(Contact contact) {
if(mContact != null) {
mContact.add(contact);
// This will refresh the list.
notifyDataSetChanged();
}
}
我仍然建议您阅读上面链接中提到的教程,您的适配器类需要进行大量更改才能更好地实现。按照此教程进行自定义适配器您的
showRecords
方法错误。您不会循环浏览记录并为每个记录设置适配器。您应该创建一个适配器的实例,该实例由您的列表支持,然后将其设置为once请David,您能为我这样做吗?因为我完全搞不懂jhamas,感谢您提供的链接,但是我想将列表中的数据填充到listview。listview工作得很好,最大的问题是如何将数据添加到listview仍然不工作,setAdapter()类有四个参数make Contact对象中的三个参数,因此您可以修改适配器以获取联系人列表。像DataAdapter(上下文,列表联系人)
我看到你有一个线索,我可以发布整个listAdapter吗?我已经发布了整个DataAdapter类。请参阅editsit已起作用,但它返回了一个包含数据info.example.androidsqlitedb的列表。Contacts@32c445a7
public View getView(final int position, View convertView, ViewGroup parent) {
Contact contact = mContact.get(position);
....
....
holder.nameV.setText(contact.getName());
holder.phoneV.setText(contact.getPhone());
....
....
return view;
}
public void add(Contact contact) {
if(mContact != null) {
mContact.add(contact);
// This will refresh the list.
notifyDataSetChanged();
}
}