我正在制作购物清单应用程序,我将代码写到了单击某项时将其标记为的位置。
这是该部分的代码:
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));
}
}
});
}
它的工作原理与我想要的完全一样,但是当我在某个项目被标记为取消后添加另一个项目时,所有被标记为关闭的项目都会消失。
当我添加一个项目时,就像重置它一样。它不会删除我的任何项目,只是删除了它的hit_thru部分。任何帮助将不胜感激!谢谢
答案 0 :(得分:2)
您的ListView的适配器包含一个称为getView
的方法,当需要在实际View中显示列表视图项时会调用该方法。如果您在屏幕上滚动得太远或使整个ListView无效,则ListView中的视图将被丢弃。
我的猜测是,添加项目会使ListView无效。
您的getView方法应该在返回的视图上设置绘制标志。假设列表视图显示String[]
,则还需要boolean[]
来保存项目是否完整。您需要将其初始化为所有错误,并在completed[i] = !completed[i]
的开头添加一个onItemClick
。然后,可以稍后在该方法中,在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;
}