Java 笔划文本不';救不了

Java 笔划文本不';救不了,java,android,paint,Java,Android,Paint,我正在制作一个杂货清单应用程序,我写了代码,当我点击一个项目时,它会把它标记出来 这是我在该部分的代码: lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {

我正在制作一个杂货清单应用程序,我写了代码,当我点击一个项目时,它会把它标记出来

这是我在该部分的代码:

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));
                }


            }
        });
        }
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
TextView text=(TextView)视图;
如果(!text.getPaint().isStrikeThruText()){
text.setPaintFlags(text.getPaintFlags()| Paint.STRIKE_-THRU_-text_-FLAG);
}否则{
text.setPaintFlags(text.getPaintFlags()&(~Paint.STRIKE_-THRU_-text_-FLAG));
}
}
});
}
它的工作原理与我想要的完全相同,但当我在标记一个项目后添加另一个项目时,所有标记的项目都会消失


当我添加一个项目时,它就像重置一样。它不会删除我的任何项目,只删除其中的删除部分。任何帮助都将不胜感激!谢谢

您的ListView适配器包含一个名为
getView
的方法,当需要在实际视图中显示列表视图项时,会调用该方法。如果滚动到离屏幕太远或使整个ListView无效,则ListView中的视图将被丢弃

我的猜测是,添加一项会使ListView无效

getView方法应该在返回的视图上设置绘制标志。假设列表视图显示的是
字符串[]
,则还需要
布尔值[]
来保存项目是否完整。您需要将其初始化为所有FALSE,添加一个
completed[i]=!在您的
onItemClick
开始时完成[i]
。然后,您可以在if语句中检查
competited[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;
}

ListView的适配器包含一个名为
getView
的方法,当需要在实际视图中显示列表视图项时,会调用该方法。如果滚动到离屏幕太远或使整个ListView无效,则ListView中的视图将被丢弃

我的猜测是,添加一项会使ListView无效

getView方法应该在返回的视图上设置绘制标志。假设列表视图显示的是
字符串[]
,则还需要
布尔值[]
来保存项目是否完整。您需要将其初始化为所有FALSE,添加一个
completed[i]=!在您的
onItemClick
开始时完成[i]
。然后,您可以在if语句中检查
competited[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;
}

对不起,这里没有。以下是我的代码:用于完整的mainactivity.java文件。正如你们所看到的,我正在学习java,在制作应用程序的过程中学习java对我来说更容易。到目前为止,我已经制作了一个应用程序,但我知道用这段代码,我做了一些错误的事情,或者没有做任何事情。谢谢你的帮助!您需要创建一个数组来存储项目是否已完成。我还假设您的列表被称为“items”,但实际上它被称为“shoppingList”,所以您也需要从我的示例代码中更改它。最后,您需要重写ArrayAdapter中的方法,而不是将其放在主类上。是我在我的机器上运行后的一个代码粘贴箱。非常感谢您的帮助和耐心,哈哈!在看了你的pastebin上的代码后,我理解了你之前说的话。成功了!对不起,这里没有。以下是我的代码:用于完整的mainactivity.java文件。正如你们所看到的,我正在学习java,在制作应用程序的过程中学习java对我来说更容易。到目前为止,我已经制作了一个应用程序,但我知道用这段代码,我做了一些错误的事情,或者没有做任何事情。谢谢你的帮助!您需要创建一个数组来存储项目是否已完成。我还假设您的列表被称为“items”,但实际上它被称为“shoppingList”,所以您也需要从我的示例代码中更改它。最后,您需要重写ArrayAdapter中的方法,而不是将其放在主类上。是我在我的机器上运行后的一个代码粘贴箱。非常感谢您的帮助和耐心,哈哈!在看了你的pastebin上的代码后,我理解了你之前说的话。成功了!