2016-10-13 37 views
0

我在理解這裏的模式時遇到了一些麻煩。我有一個視圖和適配器混合太多。我的邏輯在哪裏出錯?RecyclerView中的可點擊圖標

嘗試獲取類似於可點擊標記的圖標。如果選中,則設置爲true,如果再次選中則返回false。 但是,即使設置爲true或false,視圖也不會自動刷新。

public class MyPojo { 

String title; 
String desc; 
int image; 
boolean isChecked; 

我的適配器類別〜

@Override 
    public void onBindViewHolder(ViewHolder holder, final int position) { 
    // - get element from your dataset at this position 
    // - replace the contents of the view with that element 
    TextView title = (TextView) holder.mView.findViewById(R.id.textView); 
    TextView desc = (TextView) holder.mView.findViewById(R.id.textView2); 
    final ImageView image = (ImageView) holder.mView.findViewById(R.id.imageView); 

      title.setText(pojos.get(position).getTitle()); 
      desc.setText(pojos.get(position).getDesc()); 
    if (!(pojos.get(position).isChecked())) { 
     image.setImageResource(pojos.get(position).getImage()); 
    } else { 
     image.setImageResource(R.mipmap.ic_launcher); 
    } 

    image.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      image.setImageResource(R.mipmap.ic_launcher); 
      //todo Where do I set my is clicked ? 
      if (pojos.get(position).isChecked) { 
       pojos.get(position).setChecked(false); 
       //image.setImageResource(R.mipmap.ic_launcher); 

      }else{ 
       pojos.get(position).setChecked(true); 
       //image.setImageResource(pojos.get(position).getImage()); 


      } 

     } 
    }); 

} 
+0

你必須在你的ViewHolder類中綁定你的視圖,例如title和desc,而不是在onBindViewHolder中。 – FarshidABZ

回答

0

你需要設置setOnclickListener()ViewHolder類,而不是一個recyclerView內onBindViewHolder()

0

多的onclick事件:

public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{ 

     public ImageView iconImageView; 
     public TextView iconTextView; 

     public MyViewHolder(final View itemView) { 
      super(itemView); 

      iconImageView = (ImageView) itemView.findViewById(R.id.myRecyclerImageView); 
      iconTextView = (TextView) itemView.findViewById(R.id.myRecyclerTextView); 
// set click event 
      itemView.setOnClickListener(this); 
      iconTextView.setOnClickListener(this); 
// set long click event 
      iconImageView.setOnLongClickListener(this); 
     } 

     // onClick Listener for view 
     @Override 
     public void onClick(View v) { 

      if (v.getId() == iconTextView.getId()){ 
       Toast.makeText(v.getContext(), "ITEM PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show(); 
      } else { 
       Toast.makeText(v.getContext(), "ROW PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show(); 
      } 
     } 


     //onLongClickListener for view 
     @Override 
     public boolean onLongClick(View v) { 

      final AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext()); 
      builder.setTitle ("Hello Dialog") 
        .setMessage ("LONG CLICK DIALOG WINDOW FOR ICON " + String.valueOf(getAdapterPosition())) 
        .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 

         } 
        }); 

      builder.create().show(); 
      return true; 
     } 
    } 

爲了得到這項目被點擊你匹配的視圖ID即V .getId()== yourViewItem.getId()