У меня есть пользовательский адаптер, который отображает сообщения в разговоре. Теперь я хочу выделить текст в текстовом виде, если сообщение не читается и в противном случае его можно развернуть. Однако, когда я просматриваю список этого адаптера, TextViews не сохраняют предыдущую настройку, они теряют полужирный текст или полужирный текст для чтения. Я пробовал много решений на SO, но до сих пор ничего не получилось.TextView внутри ListView получает изменения при прокрутке
Я поставил все переменные в класс держателя:
private class Holder {
public TextView messageTo, messageContent, date;
public ImageView imgView;
public Typeface face, bold;
public int boldText, normalText;
public int readState;
}
и GetView я получаю элемент сообщения в положении и получить READSTATE оттуда (некоторые избыточные части были опущены)
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View convertView1 = convertView;
LayoutInflater vi = (LayoutInflater) ctx
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Message message = getItem(position);
if (convertView1 == null) {
holder = new Holder();
convertView1 = vi.inflate(R.layout.list_view_main, parent,
false);
holder.messageTo = (TextView) convertView1
.findViewById(R.id.address);
holder.messageContent = (TextView) convertView1
.findViewById(R.id.previewMsg);
holder.date = (TextView) convertView1.findViewById(R.id.showDate);
holder.imgView = (ImageView) convertView1
.findViewById(R.id.quickBadge);
holder.face = Typeface.createFromAsset(ctx.getAssets(),
"fonts/helveticaneuelight.ttf");
holder.bold = Typeface.createFromAsset(ctx.getAssets(),
"fonts/helveticaneue.ttf");
holder.boldText = Typeface.BOLD;
holder.normalText = Typeface.NORMAL;
holder.readState = getItem(position).readState;
convertView1.setTag(holder);
} else {
holder = (Holder) convertView1.getTag();
}
if(holder.readState==0) {
holder.messageTo.setText(message.messageNumber);
holder.messageContent.setText(message.messageContent);
holder.date.setText(message.messageDate);
holder.messageTo.setTypeface(holder.bold, holder.boldText);
holder.messageContent.setTypeface(holder.face, holder.boldText);
holder.date.setTypeface(holder.face, holder.boldText);
} else {
holder.messageTo.setText(message.messageNumber);
holder.messageContent.setText(message.messageContent);
holder.date.setText(message.messageDate);
holder.messageTo.setTypeface(holder.bold, holder.normalText);
holder.messageContent.setTypeface(holder.face, holder.normalText);
holder.date.setTypeface(holder.face, holder.normalText);
}
return convertView1;
}
Но это не работает. У кого-нибудь есть решение для этого?
Можно ли попытаться не поставить состояние чтения в класс держателя? – Shaz
вы можете использовать 'if (message.readState == 0) {// do smething. set font} else {// что-то делать. set font} 'и удалить' holder.readState = getItem (position) .readState; ' – Raghunandan
@Shaz странно, это то, что я изначально сделал, но теперь он работает отлично! Возможно, вы захотите передать ответ, и я буду отмечать его как правильное. –