【问题标题】:how to change particularly one row textview value while click the button in custome listview?单击自定义列表视图中的按钮时如何更改特别是一行文本视图值?
【发布时间】:2015-03-17 13:29:40
【问题描述】:

我有一个带有基本适配器的自定义列表视图。我试图增加和减少特别是一行 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;
    }

}

【问题讨论】:

  • 您需要再添加一个自定义类来记录特定的行值。

标签: java android listview android-listview


【解决方案1】:

您需要为每一行保留一个值,而不是为所有行保留一个值。 将 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;


   }

}

【讨论】:

    【解决方案2】:

    您应该将文本字符串设置为特定行 TextView。

    每一行都是通过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开始递增

    【讨论】:

      【解决方案3】:

      试试这个删除

      a = a + 1;//because this is a global variable in the class
              change value1.setText(""+(a+1));
      

      如果这不是问题,则声明一个大小与列表视图大小相似的数组/数组列表,并在构造函数中填充数组列表,所有值都设置为 0。然后在 getview() 方法中

      int currentposition=position;
      plus1.setTag(currentposition);
      value1.setText(arraylist.get(currentposition));
      
       plus1.setOnClickListener(new OnClickListener() {
      
                  @Override
              public void onClick(View v) {
      
      int btnvalue=Integer.parseInt(plus1.getTag().toString());
      arraylist.set(btnvalue,(Integer.parseInt(arraylist.get(btnvalue)))+1);
      notifydatasetchanged();
      
      }
      });
      

      【讨论】:

        【解决方案4】:

        实现 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
        
        }
        

        【讨论】:

          猜你喜欢
          • 2016-07-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多