2016-10-13 4 views
0

패턴을 이해하는 데 어려움이 있습니다. 뷰와 어댑터가 너무 섞여 있습니다. 논리가 어디에서 잘못 되었습니까?RecyclerView의 클릭 가능한 아이콘

클릭 가능한 마커와 유사한 아이콘을 얻으려고합니다. 선택하면 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

onBindViewHolder가 아닌 ViewHolder 클래스에서 title 및 desc와 같은 뷰를 바인딩해야합니다. – FarshidABZ

답변

0

당신은 대신 recyclerView 내부 onBindViewHolder()

0

여러 온 클릭 이벤트 ViewHolder 클래스 setOnclickListener()을 설정해야합니다

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()

관련 문제