使用List填充ListView

时间:2015-02-23 02:07:31

标签: java android sqlite listview arraylist

我正在尝试显示我的sqlite数据库中的数据。在我的 DatabaseHandler.java 中,我有这个方法:

public List<Item> getAllItemsinList() {
    List<Item> itemList = new ArrayList<Item>();
    // Select All Query
    String selectQuery = "SELECT  * FROM " + TABLE_ITEMS;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (cursor.moveToFirst()) {
        do {
            Item item = new Item();
            item.set_id(Integer.parseInt(cursor.getString(0)));
            item.set_name(cursor.getString(1));
            item.set_description(cursor.getString(2));
            // Adding contact to list
            itemList.add(item);
        } while (cursor.moveToNext());
    }

    // return item list
    return itemList;
}

它返回一个类型为Item的列表。

在我的 MainActivity.java 中,我有这个方法:

private void populateListViewUsingList(){
    List<Item> items;
    items = db.getAllItemsinList();
    listView = (ListView) findViewById(R.id.listItems);
    ArrayAdapter<Item> itemArrayAdapter = new ArrayAdapter<Item>(this,android.R.layout.simple_list_item_1, items);
    listView.setAdapter(itemArrayAdapter);
}

列表视图已填充,但是,正在显示对象而不是数据库包含的数据。显示的文本示例为 migueld.rivera.catalogapp.Item@42a97320 。解析数据的正确方法是什么?感谢。

2 个答案:

答案 0 :(得分:2)

  

正在显示的文字示例是   migueld.rivera.catalogapp.Item@42a97320。什么是正确的方法   解析数据?

ArrayAdapter获取对象列表,并从List.get方法返回项目时调用toString方法。请参阅此处getView实施:

 T item = getItem(position);
 if (item instanceof CharSequence) {
   text.setText((CharSequence)item);

  } else {
    text.setText(item.toString());
 }

所以,

选项1:覆盖Item类中的toString方法,该方法返回Item对象的可读字符串表示

@Override
public String toString() {
    return String.format(name + "---" + description);
}

选项2:通过扩展ArrayAdapter创建自定义适配器:

Customizing Android ListView Items with Custom ArrayAdapter

答案 1 :(得分:1)

这种情况正在发生,因为您正在直接显示该对象。在适配器的getview方法中尝试这种方式

Items item = getItem(position);

textView.setText(item.get_name()+....+item.get_description);

使用您在班级中声明的适当方法名称

此处显示的自定义列表视图适配器示例 ListView with custom adapter