2015-09-12 42 views
1

我想更改我的数量textview以反映特定项目的数量。但是在单击添加和子按钮时,setText()函数似乎不起作用。这是我的适配器类如何更改按钮上的列表项中的textView单击

public class ItemAdapter extends ArrayAdapter<String>{ 
    Context context; 
    int[] images,rate,quant; 
    String[] names; 
    ImageButton add, sub; 
    ViewHolder holder; // Since will be accessed inside onclick 
    Integer count1=0; 

    HashMap<String,Integer> positiveNumbers = new HashMap<String,Integer>(); 
    Integer count=0; 

    static class ViewHolder { 
     public TextView textView; 
     public ImageView imageView; 
     public TextView number; 
     public TextView rates; 
     public String uniqueKey; 

    } 

    public ItemAdapter(Context c, String[] items, int quantity[], int[] rate, int[] img) { 
     // TODO Auto-generated constructor stub 
     super(c, R.layout.item_fooditems, R.id.tvitemname, items); 
     this.context = c; 
     this.images = img; 
     this.names = items; 
     this.rate=rate; 
     this.quant=quantity; 
    } 

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     // TODO Auto-generated method stub 
     View row = convertView; 
     // reuse views 

     if (row == null) { 
      LayoutInflater inflater = (LayoutInflater) context 
        .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      row = inflater.inflate(R.layout.item_fooditems, parent, false); 
      ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.imageView = (ImageView) row.findViewById(R.id.ivimage); 
      viewHolder.textView = (TextView) row.findViewById(R.id.tvitemname); 
      viewHolder.number = (TextView)row.findViewById(R.id.tvquantity); 
      viewHolder.rates = (TextView)row.findViewById(R.id.tvprice); 
      viewHolder.uniqueKey = String.valueOf(position); 
      add = (ImageButton) row.findViewById(R.id.bincrement); 
      add.setTag(position); 
      sub = (ImageButton) row.findViewById(R.id.bdecrement); 
      sub.setTag(position); 
      row.setTag(viewHolder); 

     } 
     holder = (ViewHolder) row.getTag(); //keeping one global memory 
     holder.imageView.setImageResource(images[position]); 
     holder.textView.setText(names[position]); 
     holder.rates.setText(Integer.toString(rate[position])); 
     holder.number.setText(Integer.toString(quant[position])); 
     holder.number.setText("x"); 
     add.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       quant[position]=quant[position]+1; 
       count1 +=1; 
       //holder.number.setText(Integer.toString(quant[position])); 
       holder.number.setText(count1.toString()); 
       Toast.makeText(context, Integer.toString(quant[position]), Toast.LENGTH_SHORT).show(); 
       Log.d("Quantity",Integer.toString(quant[position])); 
       positiveNumbers.put(holder.uniqueKey,count); //Key -> String.valueOf(position) and Value -> int count 
      } 
     }); 

     sub.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       quant[position]--; 
       Toast.makeText(context, Integer.toString(quant[position]), Toast.LENGTH_SHORT).show(); 
       holder.number.setText(Integer.toString(quant[position])); 
       positiveNumbers.put(holder.uniqueKey,count); //Key -> String.valueOf(position) and Value -> int count 
      } 
     }); 

     return row; 
    } 


    public HashMap<String, Integer> getPositiveNumbers() 
    { 
     return positiveNumbers; 
    } 


} 

需要进行哪些修改?

回答

0

您必须致电notifyDataSetChanged();sub按钮点击代码。

对于添加

add.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       quant[position]=quant[position]+1; 
       count1 +=1; 
       //holder.number.setText(Integer.toString(quant[position])); 
       holder.number.setText(count1.toString()); 
       Toast.makeText(context, Integer.toString(quant[position]), Toast.LENGTH_SHORT).show(); 
       Log.d("Quantity",Integer.toString(quant[position])); 
       positiveNumbers.put(holder.uniqueKey,count); //Key -> String.valueOf(position) and Value -> int count 

       notifyDataSetChanged(); 
      } 
     }); 

对于子

sub.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       quant[position]--; 
       Toast.makeText(context, Integer.toString(quant[position]), Toast.LENGTH_SHORT).show(); 
       holder.number.setText(Integer.toString(quant[position])); 
       positiveNumbers.put(holder.uniqueKey,count); //Key -> String.valueOf(position) and Value -> int count 

       notifyDataSetChanged(); 
      } 
     }); 

希望它的帮助!

+0

没有帮助。和以前一样,我可以看到值正在改变,但textView没有改变。 –

1

首先,不要考虑这些单独的数组,你应该简单地用你需要的所有值创建一个自定义模态类。例如在你的情况下,它会是这样的。

public class Item { 

    private String itemName = ""; 
    private int quantity; 
    private int rate; 
    private int image; 

    public String getItemName() { 
     return itemName; 
    } 

    public void setItemName(String itemName) { 
     this.itemName = itemName; 
    } 

    public int getQuantity() { 
     return quantity; 
    } 

    public void setQuantity(int quantity) { 
     this.quantity = quantity; 
    } 

    public int getRate() { 
     return rate; 
    } 

    public void setRate(int rate) { 
     this.rate = rate; 
    } 

    public int getImage() { 
     return image; 
    } 

    public void setImage(int image) { 
     this.image = image; 
    } 
} 

而现在把这个模式类你适配器constructor.And这是怎么了,你可以在你的getView()

Item item=itemList.get(position); //here itemList is the list you are passing to your adapter. 
    holder.imageView.setImageResource(item.getImage()); 
    holder.textView.setText(item.getItemName()); 
    holder.rates.setText(String.valueOf(item.getRate())); 
    holder.number.setText(String.valueOf(item.getQuantity())); 

现在来到你的加/减点击监听器设定值时,有无需在添加/子点击侦听器中设置数量TextView的文本。在更新itemList的相应索引处的数量值后,您可以简单地通知您的适配器。例如。为了增加数量,你可以做这样的事情。

add.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Item item=itemList.get(position);// getting the item at particular position 
      item.setQuantity(item.getQuantity()+1);// incrementing item quantity by 1 
      itemList.set(position,item);// updating the itemList to that new item with incremented quantity 
      notifyDataSetChanged();//notifying the adapter 
     } 
    }); 

您可以为您的减去数量onClickListener()做同样的事情。

sub.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Item item=itemList.get(position);//getting the item at particular position 
      item.setQuantity(item.getQuantity()-1);//decrementing item quantity by 1 
      itemList.set(position,item);// updating the itemList to that new item with decremented quantity 
      notifyDataSetChanged();//notifying the adapter 
     } 
    }); 

这一定会奏效。在处理ListView/RecyclerView的自定义适配器时,维护单个列表而不是拥有多个数组是一种很好的做法。

+0

对不起,迟到的回应。但是不是itemList undefined? –

+0

itemList应该是/做什么? –

+0

itemList是您将传递给适配器的列表,它将充当ListView的数据源。您将使用此数组ListList将数据膨胀到您的ListView行,即itemList。 –

相关问题