我在button
行中有一个textview
和listview
。我想在单击同一行中的按钮时增加textview值。下面是我的代码,这里是我需要更新的多行而不是单行。
package com.example.digitalmenuactivity;
public class ListAdapter extends BaseAdapter {
private Activity activity;
private Activity activity1;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public ImageLoader imageLoader;
private int mCounter1=1;
private int counter=1;
private int[] counters;
int pos;
public ListAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
imageLoader=new ImageLoader(activity.getApplicationContext());
counters = new int[5];
}
static class ViewHolder {
protected TextView mSwitcher1=null;
protected Button btnDelete=null;
protected TextView title=null;
protected TextView artist=null;
protected TextView duration=null;
protected ImageView thumb_image=null;
}
public int getCount() {
return data.size();
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
return position;
}
public View getView(final int position,final View convertView, ViewGroup parent) {
View vi=convertView;
final ViewHolder viewHolder;
pos = getItemViewType(position);
if(convertView==null)
{
vi = inflater.inflate(R.layout.list_row, null);
viewHolder = new ViewHolder();
viewHolder.title = (TextView)vi.findViewById(R.id.title);
viewHolder.artist = (TextView)vi.findViewById(R.id.description);
viewHolder.duration = (TextView)vi.findViewById(R.id.price);
viewHolder.thumb_image =(ImageView)vi.findViewById(R.id.list_image);
viewHolder.btnDelete = (Button)vi.findViewById(R.id.plus);
viewHolder.mSwitcher1 = (TextView) vi.findViewById(R.id.switcher1);
vi.setTag(viewHolder);
}
else {
viewHolder = (ViewHolder) vi.getTag();
}
viewHolder.btnDelete.setTag(pos);
viewHolder.mSwitcher1.setTag(pos);
viewHolder.btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
pos = (Integer) view.getTag();
int temp=counters[pos];
temp++;
counters[pos]= temp;
viewHolder.mSwitcher1.setText(String.valueOf(counters[pos]));
notifyDataSetChanged();
Log.d("^^^^^^", "button clicked" + counters.length);
Log.d("^^^^^^", "temp" + temp);
}
});
HashMap<String, String> song = new HashMap<String, String>();
song = data.get(position);
viewHolder.title.setText(song.get(FoodActivity.KEY_TITLE));
viewHolder.artist.setText(song.get(FoodActivity.KEY_ARTIST));
viewHolder.duration.setText(song.get(FoodActivity.KEY_DURATION));
imageLoader.DisplayImage(song.get(FoodActivity.KEY_THUMB_URL),viewHolder.thumb_image);
return vi;
}
}
答案 0 :(得分:1)
你没有犯错误:如下所列:
<强>第一强>
用于:
viewHolder.mSwitcher1.setTag(位置);
相反:
viewHolder.mSwitcher1.setTag(Integer.valueOf(位置));
<强>第二强>
无需获取视图标记两次,一旦足以获得精确选择的位置,适配器代码将如下所示:
ListviewAdapter:
import java.util.ArrayList;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.TextView;
public class ListviewAdapter extends BaseAdapter {
ArrayList<String> getData = new ArrayList<String>();
Context c;
private LayoutInflater mInflater;
int pos;
int boxState[];
SharedPreferences prefs;
private int mCounter1 = 1;
private int counter = 1;
private int[] counters;
public ListviewAdapter(Context cont, ArrayList<String> data) {
// TODO Auto-generated constructor stub
c = cont;
getData = data;
mInflater = LayoutInflater.from(cont);
counters = new int[5];
}
public int getCount() {
// TODO Auto-generated method stub
return getData.size();
}
public Object getItem(int position) {
// TODO Auto-generated method stub
return position;
}
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
public class ViewHolder {
private TextView name = null;
private Button button = null;
}
@Override
public int getItemViewType(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public int getViewTypeCount() {
// TODO Auto-generated method stub
return getData.size();
}
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final ViewHolder holder;
View vi = convertView;
pos = getItemViewType(position);
if (convertView == null) {
vi = mInflater.inflate(R.layout.row, null);
holder = new ViewHolder();
holder.name = (TextView) vi.findViewById(R.id.textView);
holder.button = (Button) vi.findViewById(R.id.checkBox);
vi.setTag(holder);
}
else {
holder = (ViewHolder) vi.getTag();
}
holder.button.setTag(pos);
holder.name.setTag(pos);
holder.button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
pos = (Integer) v.getTag();
int temp = counters[pos];
temp++;
counters[pos] = temp;
notifyDataSetChanged();
holder.name.setText(String.valueOf(counters[pos]));
Log.d("^^^^^^", "button clicked" + counters.length);
Log.d("^^^^^^", "temp" + temp);
}
});
return vi;
}
}
答案 1 :(得分:1)
您错误地使用了ViewHolder模式。阅读本文: