文字无法保存

时间:2018-12-16 00:29:08

标签: java android paint

我正在制作购物清单应用程序,我将代码写到了单击某项时将其标记为的位置。

这是该部分的代码:

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部分。任何帮助将不胜感激!谢谢

1 个答案:

答案 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;
}