Java 如何在单击custome listview中的按钮时更改一行textview值?
我有一个带有基本适配器的自定义列表视图。我试图增加和减少一行文本视图的值。它正在工作,但单击按钮时所有行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
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
}