2017-10-18 123 views
1

將Butter Knife的@OnClick添加到此方法的視圖中的正確方法是什麼?ButterKnife onClick監聽器裏面的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); 
    } 

這個問題的方式不同的是,我要綁定@OnClickFooInfoViewHolder本身。

回答

0

我想通了什麼是錯的。其實我認爲這是一個稍微不同的答案,而不是可能的重複。 關鍵是要落實在ViewHolder本身@OnClick(不,像在其他問題上的看法小孩):

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

然後是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

使用ViewHolder類並在該類內部我們可以處理黃油刀的點擊。

以下是理解的例子。

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

希望它能幫助你。乾杯!