0

所以我在从我的对象列表中填充它时在 ListView 项目上应用删除线时遇到了这个巨大的问题。

    private void setListItems() {
        DatabaseHandler db = new DatabaseHandler(this);
        List<ToDoTask> taskList = db.getAllTasks();

        for (ToDoTask tt : taskList) {
            this.listAdapter.add(tt.getName());
        }

        this.listAdapter.notifyDataSetChanged();
    }

这部分代码填充了我的 ListView。现在我想在项目中添加删除线,如果

    tt.getActive() == 0

我不知道如何从我的 ListView 中获取 TextView 项目。我在我的 for 循环中尝试:

    TextView textView = (TextView) this.listView.getChildAt(this.listView.getCount() -1);

但应用程序崩溃。唯一没有让我的应用崩溃的解决方案是:

    TextView textView = this.listAdapter.getView(this.listView.getCount() -1, null, null)

但它实际上并没有改变 ListView 中的任何内容。我认为它没有引用对象本身。这是一些实例化我的变量的代码:

    this.listView = (ListView) findViewById(R.id.listViewItem);
    this.listItems = new ArrayList<String>();
    this.listAdapter = new ArrayAdapter<String>(this, 
            android.R.layout.simple_list_item_1, this.listItems);
    this.listView.setAdapter(this.listAdapter);
4

1 回答 1

2

列表视图不负责实例化或修改它包含的视图的底层状态。这就是适配器的工作。当您滚动 ListView 时,它会调用适配器方法getView(),并且适配器会将其交给一行(可能是从滚动到屏幕外的行中回收的视图)。

在该getView()方法内部,适配器应查阅基础数据集并根据需要修改行 - 这将包括删除文本或设置行内容的任何可视属性。

于 2014-01-07T22:28:23.320 回答