Слушатель ButterKnife onClick внутри метода 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);
        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 ответа

Решение

Я понял, что случилось. На самом деле я думаю, что это немного другой ответ, чем возможные дубликаты. Ключ должен был реализовать @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);
    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);
        }
    }

Используйте класс 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
        }
    }
}

Надеюсь, это поможет вам. Ура!!!

Другие вопросы по тегам