Android 如何在可展开的Listview中将textview标记为strike through

Android 如何在可展开的Listview中将textview标记为strike through,android,expandablelistview,Android,Expandablelistview,当我在可展开的listview项上调用操作模式时,其中一个选项是标记为已完成 我在onActionItemClicked中所做的,其中child_单击的只是长时间单击的视图: TextView row = (TextView) child_clicked.findViewById(R.id.todoTitle); if (todo.getStatus() == 1) { int count = mSQLiteHelper.MarkTodoAsComplete(Id, mSQLiteDat

当我在可展开的listview项上调用操作模式时,其中一个选项是标记为已完成

我在onActionItemClicked中所做的,其中child_单击的只是长时间单击的视图:

TextView row = (TextView) child_clicked.findViewById(R.id.todoTitle);
if (todo.getStatus() == 1) {
    int count = mSQLiteHelper.MarkTodoAsComplete(Id, mSQLiteDatabase);
    row.setPaintFlags(row.getPaintFlags() & ~Paint.STRIKE_THRU_TEXT_FLAG);
} else {
    int count = mSQLiteHelper.MarkTodoAsActive(Id, mSQLiteDatabase);
    row.setPaintFlags(row.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
}
行布局如下所示:

<LinearLayout> 
    <TextView android:id="@+id/todoTitle"/>
</LinearLayout>


但是什么都没有发生,没有错误。必须在此处执行哪些操作才能使此工作正常?

将此代码应用于ExpandableListView项目的文本视图

tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

使用前面提到的可扩展列表视图方法是行不通的。您应该像这样将新对象传递给Hashmap。如果已经在适配器中设置了strike through,则无需添加strike through

   Todo newTodo;
     if (todo.getStatus() == 1) {
     newTodo = new Todo(todo.getTitle(), todo.getCategory(), 0, todo.getId_() );
    int count = mSQLiteHelper.MarkTodoAsComplete(Id, mSQLiteDatabase);

   } else {
   newTodo = new Todo(todo.getTitle(), todo.getCategory(), 1, todo.getId_() );
  int count = mSQLiteHelper.MarkTodoAsActive(Id, mSQLiteDatabase);

                }

            switch (todo.getCategory()) {

                case 0:
                    L1.set(childPosition, newTodo);
                    ChildList.put(Headings.get(6), L1);
                        break;

...
}

 mTodoExpandableAdapter.notifyDataSetChanged();

就是这样。希望这能有所帮助。

您也需要在适配器实现中这样做,因为
ExpandableListView
会循环使用,因此当用户滚动或w/e时,您将失去您的风格。
ExpandableListView
支持自动检查您的视图是否也是
可检查的
。问题是,在适配器内部,它已经实现并运行良好。但是,不知何故,“飞行”是行不通的@“阿尔萨兰·沙阿的建议也行不通。”易伽玛说。对这是因为滚动列表时会刷新视图。您必须让列表记住哪个列表项的文本视图被删除。为此,您必须存储具有strike-through文本视图的列表项的位置,并使用上面粘贴的相同代码将其指定为strike-through。