2016-04-06 23 views
1

Metinle eşleştirilen bir düğme listesi oluşturmaya çalışıyorum. Listede bir düğme tıklandığında, ilişkili metin görünümünde tamsayı değerini artırmak istiyorum. Planım aşağıdaki kodu kullanmaktı, ancak viewHolder kullanarak OnClickListener içinde bir hata yaşıyorum çünkü viewHolder son değil ve onClick içinde işlemek için bu olamaz. İlişkili metin değerini nasıl değiştirebilirim?ListView with Button, ViewHolder'ı OnClick içinde kullanma

public View getView(final int position, View convertView, ViewGroup parent){ 
    ViewHolder viewHolder = null; 
    if (convertView == null) { 
     LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
     convertView = inflater.inflate(R.layout.row, null); 
     viewHolder = new ViewHolder(); 
     viewHolder.text = (TextView) convertView.findViewById(R.id.playerScore); 
     viewHolder.button = (Button) convertView.findViewById(R.id.playerButton); 
     viewHolder.button.setOnClickListener(new View.OnClickListener() { 
      protected String scoreToSet; 
      @Override 
      public void onClick(View v) { 
       viewHolder.text.setText(Integer.toString(modelList.get(position).getScore() + 1)); //Error is occurring here 
      } 
     }); 
     convertView.setTag(viewHolder); 
    } 
    else{ 
     viewHolder = (ViewHolder) convertView.getTag(); 
     viewHolder.button.setText(modelList.get(position).getPlayer()); 
    } 
    return convertView; 
} 

Yardımın için teşekkürler!

public View getView(final int position, View convertView, ViewGroup parent){ 
     ViewHolder viewHolder = null; 
     if (convertView == null) { 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.row, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) convertView.findViewById(R.id.playerScore); 
      viewHolder.button = (Button) convertView.findViewById(R.id.playerButton); 
      convertView.setTag(viewHolder); 
     } 
     else{ 
      viewHolder = (ViewHolder) convertView.getTag(); 

     } 
     viewHolder.button.setText(modelList.get(position).getPlayer()); 

      viewHolder.button.setOnClickListener(new View.OnClickListener() { 
       protected String scoreToSet; 
       @Override 
       public void onClick(View v) { 
        setValue(position); 
       } 
      }); 
     return convertView; 
    } 

setValue() beyan - - if-else blokları Dışarıya görüşlerinizi dinleyicileri veya set değerleri eklemelisiniz

cevap

0

Değiştir böyle kod,

public View getView(final int position, View convertView, ViewGroup parent) { 
     final ViewHolder viewHolder ; 
     if (convertView == null) { 
      LayoutInflater inflater = ((Activity) context).getLayoutInflater(); 
      convertView = inflater.inflate(R.layout.row, null); 
      viewHolder = new ViewHolder(); 
      viewHolder.text = (TextView) convertView.findViewById(R.id.playerScore); 
      viewHolder.button = (Button) convertView.findViewById(R.id.playerButton); 
      convertView.setTag(viewHolder); 
     } else { 
      viewHolder = (ViewHolder) convertView.getTag(); 
      viewHolder.button.setText(modelList.get(position).getPlayer()); 
     } 

     viewHolder.button.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       //TODO UPDATE the model here 
       int newScore = modelList.get(position).getScore() + 1; 
       modelList.get(position).setScore(newScore); 
       viewHolder.text.setText(Integer.toString(newScore); 
      } 
     }); 

     return convertView; 
    } 
0

public void setValue(int position){ 
    ViewHolder.text.setText(Integer.toString(modelList.get(position).getScore() + 1)); 
}