在ViewHolder方法中使用ButterKnife onClick监听器

时间:2017-10-18 09:04:37

标签: java android onclick android-viewholder butterknife

在此方法中,将Butter Knife @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);
        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);
    }

这个问题的不同之处在于我想将@OnClick绑定到FooInfoViewHolder本身。

2 个答案:

答案 0 :(得分: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
        }
    }
}

希望它会对你有所帮助。干杯!!!

答案 1 :(得分:0)

我弄清楚出了什么问题。实际上我觉得它的答案与可能重复的答案略有不同。 关键是要在ViewHolder ITSELF上实现@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);
        }
    }