在ListView中绘制项目

时间:2014-12-08 21:30:37

标签: android listview select paint

早上好。

我有一个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;
}

问题在于,除了绘制选定的项目外,当我走过列表时,还会绘制其他项目。

有人可以帮助我吗?

抱歉我的英语。

1 个答案:

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