android - 在 ListView 中单击按钮时增加 TextView 值

标签 android android-listview textview android-button

我在 listview 行中有一个 buttontextview。我想在单击同一行中的按钮时增加 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/

相关文章:

android - 如何在 ListView 的按下状态下使用带有渐变的可绘制对象?

android - 根据字符设置 TextView 的宽度

android - 在whatsapp android中标记一个词

android - 如何从 Activity 中更改 fragment textView 文本

java - 在android中的gridview底部添加一个按钮

安卓应用程序更新通知

android - 服务器无法处理您的请求,值不能为空 :soap parsing

android - ListView 不刷新已经可见的项目

java - 有没有办法根据电话号码从电话中获取 WAN IP 地址?

设置 OnClickListener 时,Android ListView 不突出显示