2015-08-28 3 views
0

У меня есть 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; 
} 

} 

спасибо заранее.

+2

Значение, которое вы меняете в hold.fCount.setText, обновите это значение в y и в нашем журнале 'posts'. Так что следующий просмотр времени будет перезагружен, вы получите только обновленное значение. – Darpan

+0

спасибо, не могли бы вы объяснить, где я должен это сделать? Я имею в виду, если я нажимаю на несколько строк, то каждый раз я должен изменить значение на «сообщениях», а также вызвать конструктор, чтобы получить изменение? –

+1

Вам нужно установить это значение в 'pList', а не в' posts'. и вы вызовете это прямо ниже 'hold.fCount.setText' в' onClickListener' – Darpan

ответ

0

При увеличиваем fCounted значение приращения того, что значение в вашей коллекции есть pList, а

в вашем getview метод положить позиции в качестве тега в fCount компонента

viewHolder.fIcon.setTag(position); // this is to get exact position for which we will change/increment value 

Теперь в методе OnClickListener FICON в

viewHolder.fIcon.setOnClickListener(new View.OnClickListener() { 
    @Override 
     public void onClick(View v) { 


       if(!t){ 
        fCounted++; 

        hold.fCount.setText(""+fCounted); 
        int position = (int)v.getTag(); 
        int oldValue = pList.get(position).NumFrnd; 
        pList.get(position).NumFrnd = ++oldValue; 
      } 

} 
}; 
+0

не может разрешить метод setTag (int), когда я помещаю fCount.setTag (position); где я должен это поставить? –

+0

внутри getview() – Prachi

+0

перед моим первым комментарием я уже сделал это внутри getView() –

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

  • Нет связанных вопросов^_^