【问题标题】:How to strikethrough ListView item while populating ListView如何在填充 ListView 时删除 ListView 项目
【发布时间】:2014-01-07 22:19:51
【问题描述】:

所以在从我的对象列表中填充 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);

【问题讨论】:

    标签: android listview loops textview strikethrough


    【解决方案1】:

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

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

    【讨论】:

    • @user3170934:关于删除线部分,您需要使用StrikethroughSpan
    • @Collin FLynn:如果我理解正确,我需要通过键入TextView tv = this.listAdapter.getView(this.listView.getCount() - 1, null, this.listView) 来获取 TextView 元素。是的,这给了我一个 TextView 对象,但是当我在这个人身上设置标志时,它不会影响 listView 和 listAdapter。我应该告诉 listAdapter 以某种方式更新给定位置的视图吗?
    • @user3170934 是的,您应该告诉适配器更新视图。一种方法是使用ViewHolder 模式来发挥您的优势。让适配器将位置 int 存储在每行的每个 ViewHolder 内。在您的适配器中编写一个方法,该方法将一行(无论您的行是什么 - 一些视图)作为参数。从该行中,抓住视图持有者并检查位置 int 以查看它在数据集中的哪个项目。您应该将该状态作为适配器内部数据集的一部分保存,并在 getView 方法中检查您被要求提供的视图的状态,然后构造它。
    • 我还应该提到 - 如果您对数据集进行更改,请致电 notifyDataSetChanged() 并且将提示 ListView 再次询问适配器的所有行。然后适配器可以使用修改后的数据集构造这些行。
    猜你喜欢
    • 2013-12-17
    • 2019-01-15
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多