早上好。
我有一个ListView条目,通过选择其中一个条目显示详细信息。 我需要更改访问的条目的背景颜色。 为此,我获取所选项并返回值intentificacion为1。
lv_entries.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Entry entry = (Entry) parent.getItemAtPosition(position);
entry.setSeleccion(1);
Intent intent = new Intent(ListEntriesActivity.this,
EntryDetailActivity.class);
intent.putExtra(Keys.ENTRY, entry);
startActivity(intent);
}
});
然后,如果访问了条目,我会比较适配器并更改背景颜色:
public View getView(int position, View convertView, ViewGroup parent) {
Entry entry = getItem(position);
ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.activity_list_entries,
parent, false);
viewHolder = new ViewHolder();
viewHolder.tv_entry_title = (TextView) convertView
.findViewById(R.id.tv_list_titulo);
viewHolder.tv_entry_link = (TextView) convertView
.findViewById(R.id.tv_list_link);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if(entry.getSeleccion()==1){
convertView.setBackgroundColor(R.color.azul);
}
viewHolder.tv_entry_title.setText(entry.getTitle());
viewHolder.tv_entry_link.setText(entry.getLink());
return convertView;
}
问题在于,除了绘制选定的项目外,当我走过列表时,还会绘制其他项目。
有人可以帮助我吗?
抱歉我的英语。答案 0 :(得分:0)
你的问题出在你的getView方法中,为了让你的ListView不会消耗掉一堆内存,ListView重新查找其中的项目,通过滚动列表,将导致重用项目的背景使用你的颜色改成。因此,为了阻止这种情况发生,您应该将getView更改为:
public View getView(int position, View convertView, ViewGroup parent) {
Entry entry = getItem(position);
ViewHolder viewHolder;
if (convertView == null) {
LayoutInflater inflater = LayoutInflater.from(getContext());
convertView = inflater.inflate(R.layout.activity_list_entries,
parent, false);
viewHolder = new ViewHolder();
viewHolder.tv_entry_title = (TextView) convertView
.findViewById(R.id.tv_list_titulo);
viewHolder.tv_entry_link = (TextView) convertView
.findViewById(R.id.tv_list_link);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
if(entry.getSeleccion()==1){
convertView.setBackgroundColor(R.color.azul);
}else{
// Use your default color here
convertView.setBackgroundColor(android.R.color.white);
}
viewHolder.tv_entry_title.setText(entry.getTitle());
viewHolder.tv_entry_link.setText(entry.getLink());
return convertView;
}