2016-03-05 18 views
2

我是新來的android編程。我想更新recyclerview的卡片視圖佈局中的項目。這是recyclerviewView.getId()不起作用

public static class ListMenuRowViewHolder extends RecyclerView.ViewHolder 
{ 
     protected NetworkImageView thumbnail; 
     protected TextView itemname; 
     protected TextView price; 
     protected TextView itemtype; 
     protected TextView quantity; 
     protected ImageView add; 
     protected ImageView sub; 
     protected ImageView imageView; 
     protected CardView item_layout; 

     public ListMenuRowViewHolder(View itemView) { 
      super(itemView); 


      this.thumbnail=(NetworkImageView)itemView.findViewById(R.id.recom); 
      this.imageView=(ImageView)itemView.findViewById(R.id.categ); 
      this.itemname=(TextView)itemView.findViewById(R.id.itemvalue); 
      this.add=(ImageView)itemView.findViewById(R.id.add); 
      this.sub=(ImageView)itemView.findViewById(R.id.sub); 
      this.price=(TextView)itemView.findViewById((R.id.price)); 
      this.quantity=(TextView)itemView.findViewById((R.id.quantity)); 
      this.item_layout=(CardView)itemView.findViewById((R.id.item_layout)); 
      itemView.setClickable(true); 
      itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        Log.e("myname", "rohit"); 
        ItemscardClickListener.onClick(v, getAdapterPosition()); 
       } 
      }); 

     } 

    } 

的ListRowViewHolder這是我試圖更新量

mAdapter.setItemsCardClickListener(new ItemsCardClickListener() { 
       @Override 
       public void onClick(View v, int position) { 

        int q; 
        switch (v.getId()) 
        { 
         case R.id.add : q= Integer.parseInt(mAdapter.getmOrder().get(position).getQuantity()); 
          q++; 
          Log.e("mishra", String.valueOf(q)); 
          mAdapter.getmOrder().get(position).setQuantity(String.valueOf(q)); 
          mAdapter.notifyDataSetChanged(); 
          break; 
         case R.id.sub : q=Integer.parseInt(mAdapter.getmOrder().get(position).getQuantity()); 
          if(q>0) 
           q--; 
          mAdapter.getmOrder().get(position).setQuantity(String.valueOf(q)); 
          mAdapter.notifyDataSetChanged(); 
          break; 
         case R.id.quantity: 
          Log.e("mishra", "hihi"); 
          break; 
         default:Log.e("mishra", "hi"); 


        } 
       } 
      }); 

每次當我點擊他們點擊視圖中的項目,但我沒有得到使用v.getId()的id。交換機總是進入默認情況。請提供一些解決方案。

+0

是IDS正確的佈局?請顯示所有這些視圖的來源佈局。 –

回答

1

您正在爲您的View設置OnClickListener,其中包含所有其他子視圖,而不是各個子視圖本身。你應該讓ListMenuRowViewHolder實施View.OnClickListener,並設置一個監聽器上每一個人觀點,像這樣:

sub.setOnClickListener(this); 
price.setOnClickListener(this); 
//etc 

您可以實現

@Override 
public void onClick(View v) { 
    //Now the correct subview gets passed to your switch in the Activity 
    ItemscardClickListener.onClick(v, getAdapterPosition()); 
} 
ListMenuRowViewHolder

因此,這將是這樣的:

public static class ListMenuRowViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    protected NetworkImageView thumbnail; 
    protected TextView itemname; 
    protected TextView price; 
    protected TextView itemtype; 
    protected TextView quantity; 
    protected ImageView add; 
    protected ImageView sub; 
    protected ImageView imageView; 
    protected CardView item_layout; 

    public ListMenuRowViewHolder(View itemView) { 
     super(itemView); 

     this.thumbnail = (NetworkImageView) itemView.findViewById(R.id.recom); 
     this.imageView = (ImageView) itemView.findViewById(R.id.categ); 
     this.itemname = (TextView) itemView.findViewById(R.id.itemvalue); 
     this.add = (ImageView) itemView.findViewById(R.id.add); 
     this.sub = (ImageView) itemView.findViewById(R.id.sub); 
     this.price = (TextView) itemView.findViewById(R.id.price); 
     this.quantity = (TextView) itemView.findViewById(R.id.quantity); 

     this.add.setOnClickListener(this); 
     this.sub.setOnClickListener(this); 
     //Do this for each view 
    } 

    @Override 
    public void onClick(View v) { 
     Log.e("myname", "rohit"); 
     ItemscardClickListener.onClick(v, getAdapterPosition()); 
    } 
} 
+0

謝謝!有效 –

0

您設置容器(ItemView控件)的點擊收聽。您需要在您的個人看法設置點擊聽衆:

this.add.setOnClickListener(mListener); 
this.sub.setOnClickListener(mListener); 
this.price.setOnClickListener(mListener); 
this.quantity.setOnClickListener(mListener); 

然後聲明監聽器:

View.OnClickListener mListener = new View.OnClickListener() { 
    public void onClick(View view) { 
     switch (view.getId()) { 
      case R.id.add: 
       break; 
      case R.id.sub: 
       break; 
      // add others 
     } 
    } 
}