【问题标题】:Iterating through every item in a ListView - Android遍历 ListView 中的每个项目 - Android
【发布时间】:2017-04-24 01:29:45
【问题描述】:

我需要我的应用程序根据每个项目的内容在我的 SQLite 数据库中是否标记为已选中,对 ListView 中每个项目的内容应用删除线。现在,我从数据库表中获取列表视图中每个项目的文本,将其存储在列表中,将其传递给 ArrayAdapter,然后使用它来设置我的 ListView 适配器。这是我的代码:

private ListView taskList = (ListView) view.findViewById(R.id.task_list);

// Get text for each TextView from database
db.getWritableDatabase();
tasks = db.readTasks((int) listId);

// Set up adapter for ListView
adapter = new ArrayAdapter<String>(
            view.getContext(),
            android.R.layout.simple_expandable_list_item_1,
            tasks);
taskList.setAdapter(adapter);

我的想法是在设置后遍历 ListView 中的每个项目,并检查数据库中的相应记录是否将其标记为已检查,然后对该项目采取相应的行动。但是,我不知道如何迭代 ListView 的内容,我也不确定这是执行此操作的最佳方法。有谁知道如何迭代 ListView 的内容,或者有更好的方法吗?

【问题讨论】:

标签: android sqlite listview iteration


【解决方案1】:

首先定义一个具有有用属性的Task对象:

class Task {
    public boolean isComplete() {...};
    @override String toString() {...};
}

然后让您的 db 方法返回此类对象的列表:

ArrayList<Task> tasks = db.readTasks((int) listId);

最后,继承 ArrayAdapter:

private static class TaskAdapter extends ArrayAdapter<Task> {
    private ArrayList<Task> mTasks;
    TaskAdapter (Context c, ArrayList<Task> list) {
        super(c, android.R.layout.simple_spinner_item, list);
        mTasks = list;
    }

    @Override
    public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
        View v = super.getView(position, convertView, parent);
        TextView txt = v.findViewById(android.R.id.text1);
        int flags = txt.getPaintFlags();
        if (mList.get(position).isComplete()) {
            flags = flags | Paint.STRIKE_THRU_TEXT_FLAG;
        } else {
            flags = flags & ~Paint.STRIKE_THRU_TEXT_FLAG;
        }
        txt.setPaintFlags(flags);
    }
}

当您对适配器进行子类化时,您还可以做更多事情:例如。创建您自己的视图布局(例如,如果您想要一个“勾号”图形而不是删除线)。

谷歌搜索这类事情的例子。有很多。

【讨论】:

    猜你喜欢
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多