【问题标题】:Populate spinner from database content (SQLite)从数据库内容填充微调器 (SQLite)
【发布时间】:2017-11-17 15:24:14
【问题描述】:

如何从数据库 (SQLite) 填充微调器内容

我有 POJO:类别,包含 id 和 name, 我已经有了这个表,它有一个函数可以像这样获取 ArrayList:

public List<SetcardCategory> getAllSetcardCategory()
{
    List<SetcardCategory> setcardCategories = new ArrayList<SetcardCategory>();
    String selectQuery = "SELECT  * FROM " + TABLE_SETCARD_CATEGORIES;

    SQLiteDatabase db = this.getReadableDatabase();
    Cursor c = db.rawQuery(selectQuery, null);

    // looping through all rows and adding to list
    if (c.moveToFirst()) {
        do {
            SetcardCategory setcardCategory = new SetcardCategory();
            setcardCategory.setId(c.getInt((c.getColumnIndex("id"))));
            setcardCategory.setName(c.getString(c.getColumnIndex("name")));

            // adding to tags list
            setcardCategories.add(setcardCategory);
        } while (c.moveToNext());
    }
    return setcardCategories;
}

然后在 Activity 我这样称呼它:

List<SetcardCategory> setcardCategories = db.getAllSetcardCategory();
    ArrayAdapter<SetcardCategory> arrayAdapter = new ArrayAdapter<SetcardCategory>(
            this, android.R.layout.simple_spinner_item, setcardCategories);
    arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    Spinner sItems = (Spinner) findViewById(R.id.setcardCategory);
    sItems.setAdapter(arrayAdapter);

当我运行它时,它会加载这样的字符串:“schema.SetcardCategory@22293c98”和许多其他类似的值。

如何填充微调器以将 name 字段显示为标签,并将 id 字段显示为我们提取以保存到 DB 中的值?

【问题讨论】:

  • 在 pojo 类中重写 tostring 方法并返回要在微调器中显示的值
  • 您可以使用SimpleCursorAdapter 5 行代码完成此操作

标签: java android sqlite spinner


【解决方案1】:
class Pojo{
 private String name;
  @Override
    public String toString() {
        return name;
    }
}

在 pojo 类中这样做,这样当它使用适配器中的 to string 方法来加载数据时,它将为对象返回一个值

【讨论】:

    【解决方案2】:

    解决方案 1 覆盖 SetcardCategory 类中的 toString 方法

    class SetcardCategory {
    ...
    ...
    @Override
        public String toString() {
            return this.name;
        }
    }
    

    解决方案 2 如果您只想显示名称,只需从 DB 中选择名称即可

    public List<String> getAllSetcardCategory()
        {
            List<String> setcardCategories = new ArrayList<String>();
            String selectQuery = "SELECT  * FROM " + TABLE_SETCARD_CATEGORIES;
    
            SQLiteDatabase db = this.getReadableDatabase();
            Cursor c = db.rawQuery(selectQuery, null);
    
            // looping through all rows and adding to list
            if (c.moveToFirst()) {
                do {
                    // adding to tags list
                    setcardCategories.add(c.getString(c.getColumnIndex("name")));
                } while (c.moveToNext());
            }
            return setcardCategories;
        }
    

    并创建 Array Adapter 为

    List<String> setcardCategories = db.getAllSetcardCategory();
        ArrayAdapter<SetcardCategory> arrayAdapter = new ArrayAdapter<SetcardCategory>(
                this, android.R.layout.simple_spinner_item, setcardCategories);
        arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    

    【讨论】:

    • 通过使用这个,我无法获取id,对吧? Manoj kumar 的回答更适合情况
    • 我给出了两种解决方案。我给出了第二种解决方案,因为看起来您只需要名称。
    • 哦,我很抱歉,我看到 Manoj 先回答,但实际上你的回答先发布。
    • @Gabriel 不,它没有在适配器中提供有效的行 ID,因此您应该使用 CursorAdapter - 例如 SimpleCursorAdapter
    猜你喜欢
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多