butterknife @OnClick在CustomAdapter中的ViewHolder里面

Gon*_*Get 4 android onclick custom-adapter butterknife

我正在学习butterknife,我需要在我的客户适配器生成的不同视图上绑定特定的@OnClicks.我该如何解决这个问题?

我在其中一个问题中看到了答案,说他在'ViewHolder'中使用'@onclick'.我不确定如何完全实现这一点.有任何想法吗?

谢谢!

Ugu*_*gur 6

想象一下,你有一个像这样的ViewHolder.

static class ViewHolder {

    @InjectView(R.id.user_name)
    TextView userName;

    @InjectView(R.id.user_title)
    TextView userTitle;


    public ViewHolder(View view) {
        ButterKnife.inject(this, view);
    }

}
Run Code Online (Sandbox Code Playgroud)

您可以为适配器中的每个视图绑定适配器getView方法中的事件.

 @Override
public View getView(int position, View convertView, ViewGroup parent) {

    final ViewHolder holder;
    if (convertView != null) {
        holder = (ViewHolder) convertView.getTag();
    } else {
        convertView = LayoutInflater.from(mContext).inflate(
                R.layout.your_row_layout, parent, false);
        holder = new ViewHolder(convertView);
        convertView.setTag(holder);
    }

   holder.userName.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            //Your stuff here
        }
    });


    holder.userTitle.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           //Your stuff here  
        }
    });

    return convertView;

}
Run Code Online (Sandbox Code Playgroud)

  • +1使ViewHolder最终并实际上称之为ViewHolder.+1使ViewHolder类静态.最后,+1使用!= null来获得较小的if-logic阻止顶部并且不碍事.从未考虑过这样做的if-logic.我将更新我的代码;)我希望更多的SO答案是这样的.做得好@Ugur. (2认同)