Android 如何在可展开的Listview中将textview标记为strike through
当我在可展开的listview项上调用操作模式时,其中一个选项是标记为已完成 我在onActionItemClicked中所做的,其中child_单击的只是长时间单击的视图: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
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。