У меня есть ListView и простой класс адаптера с двумя элементами. Я просто хочу изменить один элемент, clciking другой, но всякий раз, когда я прокручиваю вниз или вверх, изменение исчезает. Я изучал эту две ссылкуИзменение элемента списка List, щелкнув другой элемент той же строки
Why do items disappear when I scroll the listView?
Clickable element in custom ListView row
Я знаю, что ListView имеет функцию рециркуляции, которая является причиной для этого, но я хочу простое решение без обновления всего списка, и когда я буду менять на несколько строк, оно должно быть там после вызова getView, означающего после прокрутки вверх или вниз. вот мой адаптер код класса
public class Pha extends BaseAdapter {
private List<PhaMessages> pList = new ArrayList<PhaMessages>();
private Activity context;
ViewHolder viewHolder = null;
int fCounted = 0;
public Pha(Activity cont, ArrayList<PhaMessages> posts){
this.context = cont;
this.pList = posts;
Log.d("pha","called constructor..");
}
static class ViewHolder {
protected TextView fCount;
protected ImageView fIcon;
}
@Override
public int getCount() {
return pList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
convertView = inflator.inflate(R.layout.pha_list_row, null);
viewHolder = new ViewHolder();
viewHolder.fIcon = (ImageView)convertView.findViewById(R.id.f_counter_img);
viewHolder.fCount = (TextView)convertView.findViewById(R.id.f_plus);
convertView.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) convertView.getTag();
}
final ViewHolder hold = viewHolder;
viewHolder.fCount.setText("" + pList.get(position).NumFrnd);
viewHolder.fIcon.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!t){
fCounted++;
hold.fCount.setText(""+fCounted);
// by doing this at list I can see an immediate change that the number is changing
//
//but is i do viewHolder.fCount.setText(""+fCounted); I see another row changing
}else {
Toast.makeText(context,"You have already clcik this.",Toast.LENGTH_SHORT).show();
}
}
});
return convertView;
}
}
спасибо заранее.
Значение, которое вы меняете в hold.fCount.setText, обновите это значение в y и в нашем журнале 'posts'. Так что следующий просмотр времени будет перезагружен, вы получите только обновленное значение. – Darpan
спасибо, не могли бы вы объяснить, где я должен это сделать? Я имею в виду, если я нажимаю на несколько строк, то каждый раз я должен изменить значение на «сообщениях», а также вызвать конструктор, чтобы получить изменение? –
Вам нужно установить это значение в 'pList', а не в' posts'. и вы вызовете это прямо ниже 'hold.fCount.setText' в' onClickListener' – Darpan