java - 如何在单击自定义 ListView 中的按钮时特别更改一行 TextView 值?

标签 java android listview android-listview

我有一个带有基本适配器的自定义 ListView 。我试图增加和减少特别是一行 textview 值。它正在工作,但单击按钮时所有行 textview 值都已更改。我如何更改特别是一行 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;


   }

}

关于java - 如何在单击自定义 ListView 中的按钮时特别更改一行 TextView 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29091715/

相关文章:

java - 在 WSL 上运行时如何解决 "Graphics Device initialization failed for : es2, sw"?

Android 应用保留 'closing' ,但 logcat 中未显示任何错误

android - 在 ListView 中突出显示搜索结果

java - 这会是深拷贝的一个例子吗?

java - 如何每 x 秒重绘一个 jpanel?

android - session : an attempt was made to request new permissions for a session that has a pending request

java - Android - TextView 与 Listview 一起滚动/在 Listview 之前滚动

javascript - ListView getListItemXmlAttributes 方法因子发布项而失败

java - Spring REST - 正在下载损坏/空白文件

javascript - 强制 Android WebView 离线