我在 listview
行中有一个 button
和 textview
。我想在单击同一行中的按钮时增加 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;
}
最佳答案
你做的错误如下:
首先
用过的:
viewHolder.mSwitcher1.setTag(position);
相反:
viewHolder.mSwitcher1.setTag(Integer.valueOf(position));
第二
无需两次获取 View 标签,一次就足以获取准确的选定位置,适配器代码如下所示:
ListView 适配器:
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;
}
}
关于android - 在 ListView 中单击按钮时增加 TextView 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15918619/