2017-10-18 14 views
1

Quelle serait la bonne façon d'ajouter @OnClick Butter Knife à la vue dans cette méthode?ButterKnife onClick à l'intérieur de la méthode ViewHolder

private List<Foo> foos; 
    private RecyclerView recyclerView; 
    private MapActivity mapView; 
    @Override 
    public RecyclerView.ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_foo, parent, 
       false); 
     view.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       int selectedPosition = recyclerView.getChildAdapterPosition(v); 
       mapView.onFooSelected(foos.get(selectedPosition)); 
      } 
     }); 

     return new FooInfoViewHolder(view); 
    } 

La façon dont cette question est différente est que je veux lier @OnClick au FooInfoViewHolder lui-même.

Répondre

0

J'ai compris ce qui n'allait pas. En fait, je pense que c'est une réponse légèrement différente des doublons possibles. La clé était de mettre en œuvre le @OnClick sur le ViewHolder lui-même (pas, comme dans l'autre question, sur les enfants de la vue):

private List<Foo> foos; 
private RecyclerView recyclerView; 
private MapActivity mapView; 
@Override 
public RecyclerView.ViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) { 
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_foo, parent, 
      false); 
    return new FooInfoViewHolder(view); 
} 

puis le FooInfoViewHolder:

public class FooInfoViewHolder extends RecyclerView.ViewHolder { 

     @OnClick 
     public void onClick(View v) { 
      int selectedPosition = recyclerView.getChildAdapterPosition(v); 
      mapView.onFooSelected(foos.get(selectedPosition)); 
     } 

     public FooInfoViewHolder(View itemView) { 
      super(itemView); 
      ButterKnife.bind(this, itemView); 
     } 
    } 
0

Utilisez classe ViewHolder et à l'intérieur de cette classe, nous pouvons gérer les clics pour couteau à beurre.

Ci-dessous l'exemple juste pour comprendre.

public class YourAdapter extends RecyclerView.Adapter<YourAdapter.ViewHolder> { 

    private List<Data> list; 

    public YourAdapter(List<Data> list) { 
     this.list = list; 
    } 

    @Override 
    public YourAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     return new ViewHolder(inflater.inflate(R.layout.list_item_layout, parent, false)); 
    } 

    @Override 
    public void onBindViewHolder(YourAdapter.ViewHolder holder, int position) { 
     Data item = list.get(position); 
     holder.tvTitle1.setText(item.getTitle1()); 
    } 

    @Override 
    public int getItemCount() { 
     int count = 0; 
     if (null != list) { 
      count = list.size(); 
     } 
     return count; 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder { 

     @BindView(R.id.tvVRValue1) 
     TextView tvTitle1; 

     public ViewHolder(View itemView) { 
      super(itemView); 
      ButterKnife.bind(this, itemView); 
     } 

     @OnClick(R.id.tvVRValue1) 
     public void onClickYourFunction(){ 
      //Here your onclick method goes 
     } 
    } 
} 

Espérons que cela vous aidera. À votre santé !!!