2016-10-13 7 views
0

Ich habe einige Probleme, das Muster hier zu verstehen. Ich habe eine Aussicht und einen Adapter zu viel gemischt. Wo geht meine Logik schief?anklickbare Symbole in RecyclerView

Der Versuch, die Symbole anklickbare Marker ähnlich zu bekommen. Wenn diese Option aktiviert ist, wird sie auf "true" gesetzt und, wenn sie erneut aktiviert wird, auf "false" zurückgesetzt Aber selbst wenn es auf wahr/falsch gesetzt ist, wird die Ansicht nicht automatisch aktualisiert.

public class MyPojo { 

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

Mein Adapter Klasse ~

@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

Sie müssen Ihre Ansichten wie title und desc in Ihrer ViewHolder-Klasse binden, nicht in onBindViewHolder. – FarshidABZ

Antwort

0

müssen Sie setOnclickListener() in ViewHolder Klasse setzen statt onBindViewHolder()

0

Mehrere onClick Ereignisse innerhalb eines recyclerView:

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; 
     } 
    } 

zu erhalten, die Objekt wurde angeklickt Sie entsprechen der Ansicht ID dh v .getId() == yourViewItem.getId()