Java 如何在单击custome listview中的按钮时更改一行textview值?

Java 如何在单击custome listview中的按钮时更改一行textview值?,java,android,listview,android-listview,Java,Android,Listview,Android Listview,我有一个带有基本适配器的自定义列表视图。我试图增加和减少一行文本视图的值。它正在工作,但单击按钮时所有行textview值都已更改。如何更改一行文本视图值。请推荐我 public class BreakfastListAdapter extends BaseAdapter { private Context context; private String[] number; private int[] imageid; ImageView plus1, min

我有一个带有基本适配器的自定义列表视图。我试图增加和减少一行文本视图的值。它正在工作,但单击按钮时所有行textview值都已更改。如何更改一行文本视图值。请推荐我

public class BreakfastListAdapter extends BaseAdapter {

    private Context context;
    private String[] number;
    private int[] imageid;

    ImageView plus1, minus1;
    TextView value1;
    int a = 0;

    public BreakfastListAdapter(Context c, String[] number, int[] imageid) {
        context = c;
        this.imageid = imageid;
        this.number = number;
    }

    @Override
    public int getCount() {
        return number.length;
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            // convertView = new View(context);
            convertView = inflater.inflate(R.layout.secondadapter, null);
        }
        TextView textView = (TextView) convertView.findViewById(R.id.text);
        ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1);

        plus1 = (ImageView) convertView.findViewById(R.id.plus);
        minus1 = (ImageView) convertView.findViewById(R.id.minus);
        value1 = (TextView) convertView.findViewById(R.id.value);
        textView.setText(number[position]);
        imageView.setImageResource(imageid[position]);
        value1.setText(String.valueOf(a));
        System.out.println(a + "dddddddddddddd");

        plus1.setOnClickListener(new OnClickListener() {

            @Override
        public void onClick(View v) {
                a = a + 1;
                value1.setText(String.valueOf(a));
                Toast.makeText(context, String.valueOf(a), 1000).show();
                System.out.println("@@@@@@@@@@@@@@@@@@@@@@");
                System.out.println(a);
                notifyDataSetChanged();
            }

        });
        return convertView;
    }

}

您需要保留每行的值,而不是所有行的值。 更改
int[]a
中的
int a
,并保留每行的每个值

您将拥有以下侦听器:

@Override
public void onClick(View v) {
    a[position] = a[position] + 1;
    value1.setText(String.valueOf(a[position]));
    Toast.makeText(context, String.valueOf(a[position]), 1000).show();
    System.out.println("@@@@@@@@@@@@@@@@@@@@@@");
    System.out.println(a[position]);
    notifyDataSetChanged();
}
以下是完整的代码:

public class BreakfastListAdapter extends BaseAdapter {


private Context context;
private String[] number;
private int[] imageid;

ImageView plus1, minus1;
TextView value1;
int a[];

public BreakfastListAdapter(Context c, String[] number, int[] imageid) {
    context = c;
    this.imageid = imageid;
    this.number = number;
    this.a = new int[number.length];
}

@Override
public int getCount() {
    return number.length;
}

@Override
public Object getItem(int position) {
    return position;
}

@Override
public long getItemId(int position) {
    return 0;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    if (convertView == null) {
        // convertView = new View(context);
        convertView = inflater.inflate(R.layout.secondadapter, null);
    }
    TextView textView = (TextView) convertView.findViewById(R.id.text);
    ImageView imageView = (ImageView) convertView.findViewById(R.id.imageView1);

    plus1 = (ImageView) convertView.findViewById(R.id.plus);
    minus1 = (ImageView) convertView.findViewById(R.id.minus);
    value1 = (TextView) convertView.findViewById(R.id.value);
    textView.setText(number[position]);
    imageView.setImageResource(imageid[position]);
    value1.setText(String.valueOf(a[position]));
    System.out.println(a[position] + "dddddddddddddd");

    plus1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            a[position] = a[position] + 1;
            value1.setText(String.valueOf(a[position]));
            Toast.makeText(context, String.valueOf(a[position]), 1000).show();
            System.out.println("@@@@@@@@@@@@@@@@@@@@@@");
            System.out.println(a[position]);
            notifyDataSetChanged();
        }

    });
    return convertView;


   }

}

您应该将文本字符串设置为相应的行文本视图

每一行都通过convertView引用,因此我们将使用它

修改为:

  plus1.setOnClickListener(new OnClickListener() {

        @Override
    public void onClick(View v) {
            a = a + 1;
            // this is change
            convertView.value1.setText(String.valueOf(a));

            Toast.makeText(context, String.valueOf(a), 1000).show();
            System.out.println("@@@@@@@@@@@@@@@@@@@@@@");
            System.out.println(a);
            notifyDataSetChanged();
        }
最后我们需要将a值设置为0

// reset a value at end of getView() method
a = 0;
这样,当显示下一行时,值为0,并从0开始递增

尝试删除此行

a = a + 1;//because this is a global variable in the class
        change value1.setText(""+(a+1));
如果这不是问题,请声明一个大小类似于listview大小的数组/arraylist,并在构造函数中填充arraylist,使所有值都设置为0。然后在getview()方法中


实现ViewHolder类以维护其小部件的单独副本,例如

  ViewHolder{

    TextView t1;
    Imageview i1,i2;

    }
     @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

       ViewHolder holder;


            if (convertView == null) {

                 convertView = inflater.inflate(R.layout.secondadapter, null);

               holder = new ViewHolder();

               holder.t1 = (TextView) convertView.findViewById(R.id.text);
               holder.i1  =convertView.findViewById(R.id.imageView1);
               holder.i2  =convertView.findViewById(R.id.imageView1);

               convertView.setTag(holder);


            }else
        {

            ViewHolder holder = (ViewHolder) convertView.getTag();

         } 

            holder.t1.setText(number[position]);
            holder.i1.setImageResource(imageid[position]);
            holder.t1.setText(String.valueOf(a));
            System.out.println(a + "dddddddddddddd");

            holdert1.setOnClickListener(new OnClickListener() {

                @Override
            public void onClick(View v) {
                    a = a + 1;
                    holder.t1.setText(String.valueOf(a));
                    Toast.makeText(context, String.valueOf(a), 1000).show();
                    System.out.println("@@@@@@@@@@@@@@@@@@@@@@");
                    System.out.println(a);
                    notifyDataSetChanged();
                }

            });
            return convertView

}

您需要再添加一个自定义类,该类获取特定行值的记录。
  ViewHolder{

    TextView t1;
    Imageview i1,i2;

    }
     @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

       ViewHolder holder;


            if (convertView == null) {

                 convertView = inflater.inflate(R.layout.secondadapter, null);

               holder = new ViewHolder();

               holder.t1 = (TextView) convertView.findViewById(R.id.text);
               holder.i1  =convertView.findViewById(R.id.imageView1);
               holder.i2  =convertView.findViewById(R.id.imageView1);

               convertView.setTag(holder);


            }else
        {

            ViewHolder holder = (ViewHolder) convertView.getTag();

         } 

            holder.t1.setText(number[position]);
            holder.i1.setImageResource(imageid[position]);
            holder.t1.setText(String.valueOf(a));
            System.out.println(a + "dddddddddddddd");

            holdert1.setOnClickListener(new OnClickListener() {

                @Override
            public void onClick(View v) {
                    a = a + 1;
                    holder.t1.setText(String.valueOf(a));
                    Toast.makeText(context, String.valueOf(a), 1000).show();
                    System.out.println("@@@@@@@@@@@@@@@@@@@@@@");
                    System.out.println(a);
                    notifyDataSetChanged();
                }

            });
            return convertView

}