2016-04-06 9 views
1

テキストとペアになったボタンのリストを作成しようとしています。リスト内のボタンをクリックするたびに、関連するテキストビューで整数値を増やしたい。私の計画は次のコードを使用することでしたが、viewHolderOnClickListenerに入れてエラーが発生しました。viewHolderは最終的なものではなく、onClickの中で操作することはできません。関連するテキスト値を変更するにはどうすればよいですか?ボタン付きListView、OnClick内のViewHolderの使用

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; 
} 

ありがとうございました!

答えて

0

変更するには、このようなコード、

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

あなたが外であなたの意見にのif-elseブロックをリスナーや設定値を追加する必要があります -

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()宣言 -

public void setValue(int position){ 
    ViewHolder.text.setText(Integer.toString(modelList.get(position).getScore() + 1)); 
} 
関連する問題