4

我目前正在学习黄油刀,我需要在我的客户适配器生成的不同视图上绑定特定的@OnClicks。我该怎么做?

我在这里的一个问题中看到了一个答案,说他在“ViewHolder”中使用了“@onclick”。我不确定如何准确地实现这一点。有任何想法吗?

谢谢!

4

4 回答 4

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

}

您可以在适配器的 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;

}
于 2015-03-29T03:01:07.520 回答
3

正如@Ugur 建议的那样,您将使用黄油刀启动您的 ViewHolder。作为 userName 视图的示例,您可以将点击监听器添加到视图中:

@OnClick(R.id.user_name)
public void clickedUserName(SocialEyeTextView userName)
{
    //Do something with user name
}
于 2015-03-29T03:16:19.210 回答
1

我有这个ViewHolder..

public class ViewHolder extends RecyclerView.ViewHolder {
        @Bind(R.id.item_tipo_evento_estado_text) TextView text;
        @Bind(R.id.item_text_radiobutton_check) AppCompatCheckBox checkBox;
        public ViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }

        @OnClick(R.id.btnCheck)
        public void onCheck() {
            Log.d("ViewHolder", "position ->" + getAdapterPosition());
        }
    }

好的,我R.id.btnCheck是我的LinearLayout内容IDViews

于 2017-05-09T19:44:33.870 回答
0

ViewHolder在课堂上写这段代码

static class ViewHolder {
    public int getPosition;

    @Nullable
    @Bind(R.id.txt_title_name)
    TextView txtTitle;   

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


    @OnClick(R.id.btn_download)
    public void onCheck() {
        Log.d("ViewHolder", "position ->" + getPosition);
    }
}

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

holder.getPosition = position;
}
于 2017-06-23T11:33:10.163 回答