2015-09-25 1 views
0

Как изменить атрибуты представлений внутри держателя в зависимости от позиции? эта проблема возникает только при использовании переработок с классом держателя данных. Я могу установить разные заголовки для каждого текстового поля, основанного на позиции, но я не могу изменять текст каждого из этих текстовых просмотров на основе позиции.Как сохранить определенные атрибуты представлений в пользовательском списках просмотров

, конечно же, с recycleView = false это работает просто отлично, потому что представления не будут переработаны, но как заставить работать с переработчиком?

boolean recycleView = false; 
ArrayList<SocialItem> list; 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 

    ViewHolder holder = null; 
    if (convertView == null || !recycleView) { 

     LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     convertView = mInflater.inflate(R.layout.social_list_item, null); 

     holder = new ViewHolder(); 
     holder.title1 = (TextView) convertView.findViewById(R.id.si_title1); 
     convertView.setTag(holder); 

    } else { 
     holder = (ViewHolder) convertView.getTag(); 
    } 

    holder.title1.setText(list.get(position).getTitle1()); 

    //changes textsize of textview to fit in specific width, and saves in our holder list, and sets from it in textview 
    list.get(position).setTxtSize1(Util.correctTVWidth(holder.title1, 110)); 
    holder.title1.setTextSize(TypedValue.COMPLEX_UNIT_PX, list.get(position).getTxtSize1()); 

    return convertView; 
} 

решение Kingfisher Фуок работает, но почему следующий код не будет работать? Я думаю, что это так, это экономит расчетный текст в простом держателе pojo, основанном на позиции, и я установил из него текст, не так ли?

//changes textsize of textview to fit in specific width, and saves in our holder list, and sets from it in textview 
    list.get(position).setTxtSize1(Util.correctTVWidth(holder.title1, 110)); 
    holder.title1.setTextSize(TypedValue.COMPLEX_UNIT_PX, list.get(position).getTxtSize1()); 
+0

какая у вас функция 'Util.correctTVWidth (holder.title1, 110)' do? –

+0

возвращает скорректированный текст в соответствии с текстом, если текст длинный – winchester

ответ

1

Если я неправильно понимаю, вам нужно изменить представление в определенном положении, не так ли? Если это то, что вы хотите, вы можете это сделать. Почему нет? Посмотрите на пример ниже:

if(position == somePositionYouWant){ // change textsize at specific position 
    holder.yourTextView.setTextSize(yourtextSize); 
}else{ 
    // you must reset your textsize in other position or everything will be mess 
    holder.yourTextView.setTextSize(defaultTextSize); 
} 

Если я правильно, вы используете Util.correctTVWidth(holder.title1, 110) для расчета textsize. однако, вы должны помнить, что convertView используется повторно. Это означает, что если какая-либо строка невидима, она будет повторно использована для следующего видимого вида. Пример: 10 элементов в списке видны, когда вы прокручиваете вниз, будет отображаться 11 (12)-й элемент и повторное использование 1-го элемента, а атрибуты TextView сохраняются с 1-го элемента. Если вы вычислите текст на основе holder.title1 1-го элемента для 11-го элемента, возможно, это причина, по которой ваш код не работает.

+0

да, что работает, см. Мой отредактированный вопрос – winchester

Смежные вопросы