在listview中按钮单击时增加textview值

时间:2013-04-10 06:34:41

标签: android android-listview textview android-button

我在button行中有一个textviewlistview。我想在单击同一行中的按钮时增加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;
}

}

2 个答案:

答案 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模式。阅读本文:

http://www.jmanzano.es/blog/?p=166