Эффективный адаптер и текстовый формат - PullRequest
0 голосов
/ 28 марта 2011

Я использую EfficientAdapter, который расширяет ListActivity. Почему-то, когда я использую код вроде:

  public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
            holder = new ViewHolder();
            holder.text = (TextView) convertView.findViewById(R.id.text);
            holder.text.setPadding((int) (Vars.screenWid-300), 30, 0, 30);
            if (position==1){
                holder.text.setPadding(20, 0, 20, 0);
                holder.text.setBackgroundColor(Color.DKGRAY);
            }else{
                holder.text.setPadding(20, 20, 20, 20);
                 holder.text.setBackgroundColor(Color.TRANSPARENT);
            }
        }
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.text.setText(String.valueOf(Vars.DATAMIN[position]));
        return convertView;
    }

Я получаю список, но вместо элемента 1 с Color.DKGRAY я получаю его СЛУЧАЙНО, на других предметах. Я прокручиваю вверх и вниз и вижу изменение фона от одного элемента к другому. ЛЮБЫЕ идеи?

1 Ответ

1 голос
/ 28 марта 2011

Представления перерабатываются (это означает, что вы устанавливаете цвет представлений, которые будут отображаться в позициях, отличных от 1), поэтому для правильной работы необходимо переместить код, в котором вы меняете отступ и цвет, основываясь на положение вне блока convertView == null.

if (convertView == null) {
    convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
    holder = new ViewHolder();
    holder.text = (TextView) convertView.findViewById(R.id.text);
    holder.text.setPadding((int) (Vars.screenWid-300), 30, 0, 30);
    convertView.setTag(holder);
} else {
    holder = (ViewHolder) convertView.getTag();
}
if (position==1){
    holder.text.setPadding(20, 0, 20, 0);
    holder.text.setBackgroundColor(Color.DKGRAY);
}else{
    holder.text.setPadding(20, 20, 20, 20);
    holder.text.setBackgroundColor(Color.TRANSPARENT);
}
holder.text.setText(String.valueOf(Vars.DATAMIN[position]));
...