gpt4 book ai didi

java - 在 Android 中滚动时 ListView 项目消失

转载 作者:行者123 更新时间:2023-11-29 03:52:34 24 4
gpt4 key购买 nike

我正在为 Android 开发,我有一个应用程序(称为 Forget-Me-Not),它使用 ListView 作为任务屏幕(它是一个 ToDo 列表应用程序)。并且我已经将项目设置为在完成时显示为灰色。

当列表大于屏幕时,滚动会像往常一样发生。但问题是当向上/向下滚动并再次返回时,未完成的项目也变灰了。我已经检查了很多次,变灰似乎是随机的。这些项目是可点击的,并且它们按预期运行(即长按等)。唯一的问题是变灰。 (这让用户感到困惑,因为这个应用程序是 ToDo 列表管理应用程序,灰色是“完成”任务)。

我不知道要发布什么代码,所以如果有人能告诉我应该发布什么代码或者可以直接给出答案,我将非常感激。

PS:我有一个自定义的 ListAdapter 类。它主要从 SQLite 数据库中读取项目并将它们设置到适配器。您可以在我的应用程序中看到该错误 - 它在 Android Market (Forget-Me-Not) 中。

编辑:这是我的自定义 TaskAdapter 类:

public class TasksAdapter extends BaseAdapter {

private String[] items;
private int[] priorities;
private Vector<String> completed;
private Context context;

public TasksAdapter(TasksActivity context, int textViewResourceId, String[] items) {
if(items != null)
this.items = items;
else
this.items = new String[0];

this.priorities = new int[this.items.length];
for(int i = 0; i < this.priorities.length; i++) {
this.priorities[i] = FMN.PRIORITY_LOW;
}

this.completed = new Vector<String>(0);

this.context = context;
}

public TasksAdapter(TasksActivity context, int textViewResourceId, String[] items, int[] priorities, Vector<String> completed) {
if(items != null)
this.items = items;
else
this.items = new String[0];

if(priorities != null)
this.priorities = priorities;
else {
this.priorities = new int[this.items.length];
for(int i = 0; i < this.priorities.length; i++) {
this.priorities[i] = FMN.PRIORITY_LOW;
}
}

if(completed != null)
this.completed = completed;
else
this.completed = new Vector<String>(0);

this.context = context;
}

public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;

if (v == null) {
LayoutInflater vi = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.task_item, null);
}

TextView task = (TextView) v.findViewById(R.id.tv_task);
task.setText(items[position]);

ImageView prio = (ImageView) v.findViewById(R.id.im_task_priority);

switch(priorities[position]) {
case FMN.PRIORITY_HIGH:
prio.setImageResource(R.drawable.fmn_priority_high);
break;

case FMN.PRIORITY_MEDIUM:
prio.setImageResource(R.drawable.fmn_priority_low);
break;

case FMN.PRIORITY_LOW:
prio.setImageResource(R.drawable.fmn_priority_medium);
break;

default:
prio.setImageResource(R.drawable.fmn_priority_medium);
break;
}

if((completed.size() != 0) && (completed.contains(task.getText()))) {
task.setTextColor(Color.rgb(155, 175, 155));
}

return v;
}

public int getCount() {
return items.length;
}

public Object getItem(int position) {
return position;
}

public long getItemId(int position) {
return position;
}

}

滚动前的屏幕截图:

Before Scrolling

滚动之后: After Scrolling

最佳答案

这可能是您的 ListAdapter getView 中的错误。你回收你的列表对象/项目吗?回收时,颜色等属性将保留在对象上。确保根据任务所处的状态正确设置属性。

在 getView 函数中,您可能会检查是否已设置 View 项目,然后您只需更改项目任务的文本(回收)?在代码的同一位置,将背景颜色设置更改为正确的任务状态。

编辑现在我看到了你的代码,看起来你把优先级搞混了,默认和低优先级将背景设置为 prio.setImageResource(R.drawable.fmn_priority_medium);medium 设置背景为 prio.setImageResource(R.drawable.fmn_priority_low);

好的,我发现了问题:

if((completed.size() != 0) && (completed.contains(task.getText()))) {
task.setTextColor(Color.rgb(155, 175, 155));
}

这里需要else语句,如果没有完成就把文字颜色设置成原来的颜色。喜欢:

if((completed.size() != 0) && (completed.contains(task.getText()))) {
task.setTextColor(Color.rgb(155, 175, 155));
} else {
task.setTextColor(Color.rgb(0, 0, 0));
}

关于java - 在 Android 中滚动时 ListView 项目消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8052208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com