RecyclerView 子项目点击 onBindViewHolder()
RecyclerView Child Item Click in onBindViewHolder()
我在里面有一个 RecyclerView 和一个喜欢的按钮。例如,我想在单击按钮时发出 Toast 消息。示例代码:
class ViewHolder extends RecyclerView.ViewHolder{
Button button;
public ViewHolder(@NonNull View itemView) {
super(itemView);
button = itemView.findViewById(R.id.button);
}
}
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, ""+list.get(position).getId(), Toast.LENGTH_SHORT).show();
}
});
}
那么这种方式正确吗?由于性能问题,我不确定这必须在 onBindViewHolder() 内部吗?那么你能告诉我RecyclerView中的子项点击事件有没有更好的方法?顺便说一下,这些只是示例代码。实际上,当我单击按钮(向服务器请求)时,我正在处理更复杂的事情。
进行更改:
holder.button.layout.....
您需要获取该 holder 的实例,并在每次单击按钮时将其放置在您的视图中。
你可以简单地这样做:
class ViewHolder extends RecyclerView.ViewHolder{
Button button;
public ViewHolderMultiple(@NonNull View itemView) {
super(itemView);
button = itemView.findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Toast.makeText(context, ""+list.get(getAdapterPosition()).getId(), Toast.LENGTH_SHORT).show();
}
}
@Kasim Özdemir 现在我的代码是这样的:
class ViewHolder extends RecyclerView.ViewHolder{
Button button;
public ViewHolderMultiple(@NonNull View itemView) {
super(itemView);
like_button = itemView.findViewById(R.id.like_button);
comment_button = itemView.findViewById(R.id.comment_button);
like_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
RecyclerViewClicksUtils.likeClick(context,list,getAdapterPosition());
}
});
comment_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
RecyclerViewClicksUtils.likeClick(context,list,getAdapterPosition());
}
});
}
//I write other codes in RecyclerViewClicksUtils to avoid complexity in Adapter
public static void likeClick(final Context context, final List<PostDetailsPojo> list,
final int position){
Toast.makeText(context, ""+list.get(position).getId(), Toast.LENGTH_SHORT).show();
}
我希望这一定是正确的。
我在里面有一个 RecyclerView 和一个喜欢的按钮。例如,我想在单击按钮时发出 Toast 消息。示例代码:
class ViewHolder extends RecyclerView.ViewHolder{
Button button;
public ViewHolder(@NonNull View itemView) {
super(itemView);
button = itemView.findViewById(R.id.button);
}
}
@Override
public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, final int position) {
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Toast.makeText(context, ""+list.get(position).getId(), Toast.LENGTH_SHORT).show();
}
});
}
那么这种方式正确吗?由于性能问题,我不确定这必须在 onBindViewHolder() 内部吗?那么你能告诉我RecyclerView中的子项点击事件有没有更好的方法?顺便说一下,这些只是示例代码。实际上,当我单击按钮(向服务器请求)时,我正在处理更复杂的事情。
进行更改:
holder.button.layout.....
您需要获取该 holder 的实例,并在每次单击按钮时将其放置在您的视图中。
你可以简单地这样做:
class ViewHolder extends RecyclerView.ViewHolder{
Button button;
public ViewHolderMultiple(@NonNull View itemView) {
super(itemView);
button = itemView.findViewById(R.id.button);
button.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Toast.makeText(context, ""+list.get(getAdapterPosition()).getId(), Toast.LENGTH_SHORT).show();
}
}
@Kasim Özdemir 现在我的代码是这样的:
class ViewHolder extends RecyclerView.ViewHolder{
Button button;
public ViewHolderMultiple(@NonNull View itemView) {
super(itemView);
like_button = itemView.findViewById(R.id.like_button);
comment_button = itemView.findViewById(R.id.comment_button);
like_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
RecyclerViewClicksUtils.likeClick(context,list,getAdapterPosition());
}
});
comment_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
RecyclerViewClicksUtils.likeClick(context,list,getAdapterPosition());
}
});
}
//I write other codes in RecyclerViewClicksUtils to avoid complexity in Adapter
public static void likeClick(final Context context, final List<PostDetailsPojo> list,
final int position){
Toast.makeText(context, ""+list.get(position).getId(), Toast.LENGTH_SHORT).show();
}
我希望这一定是正确的。