butterknife @OnClick 在 CustomAdapter 的 ViewHolder 内
butterknife @OnClick inside ViewHolder in CustomAdapter
我目前正在学习 butterknife,我需要在我的客户适配器生成的不同视图上绑定特定的 @OnClicks。我该怎么做?
我在这里看到其中一个问题的答案说他在 'ViewHolder' 中使用了“@onclick”。我不确定如何准确地实现这一点。有什么想法吗?
谢谢!
假设您有一个这样的 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;
}
正如@Ugur 所建议的那样,您将使用 butterknife 启动 ViewHolder。您可以将点击侦听器添加到视图,方法是将此作为 userName 视图的示例:
@OnClick(R.id.user_name)
public void clickedUserName(SocialEyeTextView userName)
{
//Do something with user name
}
我有这个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
内容所有 Views
的 ID
把这段代码写在ViewHolder
class
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;
}
我目前正在学习 butterknife,我需要在我的客户适配器生成的不同视图上绑定特定的 @OnClicks。我该怎么做?
我在这里看到其中一个问题的答案说他在 'ViewHolder' 中使用了“@onclick”。我不确定如何准确地实现这一点。有什么想法吗?
谢谢!
假设您有一个这样的 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;
}
正如@Ugur 所建议的那样,您将使用 butterknife 启动 ViewHolder。您可以将点击侦听器添加到视图,方法是将此作为 userName 视图的示例:
@OnClick(R.id.user_name)
public void clickedUserName(SocialEyeTextView userName)
{
//Do something with user name
}
我有这个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
内容所有 Views
把这段代码写在ViewHolder
class
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;
}