我正在制作一个杂货 list 应用程序,我编写了代码,当我单击一个项目时,它会将其标记出来。
这是我该部分的代码:
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
TextView text = (TextView) view;
if (!text.getPaint().isStrikeThruText()) {
text.setPaintFlags(text.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
}else{
text.setPaintFlags(text.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
}
}
});
}
它的工作原理与我想要的完全一样,但是当我在一个项目被标记后添加另一个项目时,所有被标记的项目,标记都会消失。
当我添加一个项目时,它就像重置一样。它不会删除我的任何项目,只是删除其中的 Strike_thru 部分。任何帮助将不胜感激!谢谢
最佳答案
ListView 的适配器包含一个名为 getView
的方法,当 ListView 项需要在实际 View 中显示时会调用该方法。如果您滚动到屏幕之外太远,或使整个 ListView 无效,ListView 中的 View 将被丢弃。
我的猜测是添加项目会使 ListView 无效。
您的 getView 方法应该在它返回的 View 上设置绘制标志。假设您的 ListView 显示 String[]
,您还需要一个 boolean[]
来保存项目是否完整。您需要将其初始化为所有 false,在 onItemClick
的开头添加一个 completed[i] = !completed[i]
。然后,您可以在 if 语句中检查 competed[i]
而不是 isStrikeThruText
,稍后在该方法中。最后,你的 getView 看起来像这样
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
}
TextView textView = (TextView) convertView;
textView.setText(items[position]);
if (completed[position]) {
textView.setPaintFlags(textView.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
} else {
textView.setPaintFlags(textView.getPaintFlags() & (~Paint.STRIKE_THRU_TEXT_FLAG));
}
return textView;
}
关于java - 带删除线的文本不保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53798432/