Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在RecyclerView适配器上用ViewBinding替换ButterKnife_Java_Android Recyclerview_Butterknife_Android Viewbinding - Fatal编程技术网

Java 如何在RecyclerView适配器上用ViewBinding替换ButterKnife

Java 如何在RecyclerView适配器上用ViewBinding替换ButterKnife,java,android-recyclerview,butterknife,android-viewbinding,Java,Android Recyclerview,Butterknife,Android Viewbinding,我想在我的RecyclerView适配器类中使用新的视图绑定而不是ButterKnife 这是我的课程: import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; im

我想在我的
RecyclerView适配器类中使用新的视图绑定而不是ButterKnife

这是我的
课程

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;

import com.gallosalocin.mareu.R;
import com.gallosalocin.mareu.model.Meeting;

import java.util.List;

import butterknife.BindView;
import butterknife.ButterKnife;

public class MeetingRecyclerViewAdapter extends RecyclerView.Adapter<MeetingRecyclerViewAdapter.ViewHolder> {

private List<Meeting> meetingsList;
private OnItemClickListener onItemClickListener;

MeetingRecyclerViewAdapter(List<Meeting> meetings, OnItemClickListener onItemClickListener) {
    this.meetingsList = meetings;
    this.onItemClickListener = onItemClickListener;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview_main, parent, false);
    return new ViewHolder(view, onItemClickListener);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    Meeting meeting = meetingsList.get(position);
    String descriptionItems = String.format("%1$s - %2$s - %3$s", meeting.getTopic(), meeting.getTime(), meeting.getRoom());

    holder.roomColor.setImageResource(meeting.getRoomColor());
    holder.description.setText(descriptionItems);
    holder.email.setText(meeting.getEmail());

}

@Override
public int getItemCount() {
    return meetingsList.size();
}


public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    @BindView(R.id.iv_cardview_image)
    ImageView roomColor;
    @BindView(R.id.tv_cardview_description)
    TextView description;
    @BindView(R.id.tv_cardview_email)
    TextView email;
    @BindView(R.id.iv_cardview_delete_btn)
    ImageView deleteImage;
    @BindView(R.id.cardview_meeting)
    CardView cardView;

    OnItemClickListener onItemClickListener;

    ViewHolder(@NonNull View itemView, OnItemClickListener onItemClickListener) {
        super(itemView);
        ButterKnife.bind(this, itemView);
        this.onItemClickListener = onItemClickListener;

        deleteImage.setOnClickListener(this);
    }

    @Override
    public void onClick(View view) {
        if (view.getId() == R.id.iv_cardview_delete_btn) {
            onItemClickListener.onDeleteClick(getAdapterPosition());
        }
    }
}

    public interface OnItemClickListener {
        void onDeleteClick(int position);
    }
}
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ImageView;
导入android.widget.TextView;
导入androidx.annotation.NonNull;
导入androidx.cardwiew.widget.cardwiew;
导入androidx.recyclerview.widget.recyclerview;
进口公司gallosalocin.mareu.R;
import com.gallosalocin.mareu.model.Meeting;
导入java.util.List;
导入butterknife.BindView;
进口毛刀,毛刀;
公共类MeetingRecycleServiceAdapter扩展了RecyclerView.Adapter{
私人名单会议名单;
私有OnItemClickListener OnItemClickListener;
MeetingRecycleServiceAdapter(列出会议、OnItemClickListener和OnItemClickListener){
this.meetingsList=会议;
this.onItemClickListener=onItemClickListener;
}
@非空
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.cardwiew_main,parent,false);
返回新的ViewHolder(视图、监听器);
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,int位置){
会议=会议列表。获取(位置);
String descriptionItems=String.format(“%1$s-%2$s-%3$s”、meeting.getTopic()、meeting.getTime()、meeting.getRoom());
setImageResource(meeting.getRoomColor());
holder.description.setText(descriptionItems);
holder.email.setText(meeting.getEmail());
}
@凌驾
public int getItemCount(){
return meetingsList.size();
}
公共静态类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
@BindView(R.id.iv_cardview_图像)
图像视图颜色;
@BindView(R.id.tv\u卡片视图\u说明)
文本视图描述;
@BindView(R.id.tv\u cardview\u电子邮件)
TextView电子邮件;
@BindView(R.id.iv\u cardview\u delete\u btn)
图像视图删除图像;
@BindView(R.id.cardview_会议)
卡德维尤;
OnItemClickListener OnItemClickListener;
ViewHolder(@NonNull视图项视图,OnItemClickListener OnItemClickListener){
超级(项目视图);
ButterKnife.bind(这个,itemView);
this.onItemClickListener=onItemClickListener;
deleteImage.setOnClickListener(此);
}
@凌驾
公共void onClick(视图){
if(view.getId()==R.id.iv\u cardwiew\u delete\u btn){
onItemClickListener.onDeleteClick(getAdapterPosition());
}
}
}
公共接口侦听器{
无效单击(内部位置);
}
}
我试过了,但我有这个问题


事实上,我想用
@BindView
删除所有代码行,以使代码更具可读性。如果我犯了错误,请为我的英语道歉。

您的
ViewHolder
希望传递
View
实例。因此,只需将
binding.getRoot()
而不是
binding
传递到构造函数中,它就会工作

像这样:

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    // get your binding here: itemBinding = ...
    // and then:
    return new ViewHolder(itemBinding.getRoot(), onItemClickListener);
}
这可能对你有帮助-

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

    OnItemClickListener onItemClickListener;
    private CardviewMain binding; //binding class object

    ViewHolder(@NonNull CardviewMain binding, OnItemClickListener onItemClickListener) {
        super(binding.getRoot());
        this.binding = binding;
        this.onItemClickListener = onItemClickListener;

        this.binding.ivCardviewDeleteBtn.setOnClickListener(this);
    } 
}
在onCreateViewHolder中:

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
    CardviewMain binding = CardviewMain.inflate(layoutInflater, parent, false);
    return new ViewHolder(binding, onItemClickListener);
}

对于希望获得完整解决方案的用户:

class YourAdapter() : ListAdapter<YourCategory, YourAdapter.YourViewHolder>() {

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): YourViewHolder {
    val binding = YourItemBinding.inflate(LayoutInflater.from(parent.context), parent, false)
    return YourViewHolder(binding)
}

override fun onBindViewHolder(holder: YourViewHolder, position: Int) {
    // your stuff
}

class YourViewHolder(private val binding: YourItemBinding) : RecyclerView.ViewHolder(binding.root) {

        binding.apply {

            // your stuff
        }
    }
}
class YourAdapter():ListAdapter(){
override fun onCreateViewHolder(父级:ViewGroup,viewType:Int):YourViewHolder{
val binding=YourItemBinding.inflate(LayoutFlater.from(parent.context),parent,false)
返回您的ViewHolder(绑定)
}
覆盖BindViewHolder(holder:YourViewHolder,位置:Int){
//你的东西
}
类YourViewHolder(私有val绑定:YourItemBinding):RecyclerView.ViewHolder(binding.root){
应用{
//你的东西
}
}
}

谢谢。它起作用了。那么现在,我如何删除所有的
@BindView
并替换
ButterKnife.bind(这个,itemView)ViewHolder
构造函数中使用
itemBinding
?可以从itemBinding对象获取所有必要的视图。因此,无论何时需要视图,都可以从itemBinding中获取,比如:
itemBinding.getMyTextView()
,或者类似的smth。试着阅读这篇文章,它非常详细:再次感谢您的回答。我在应用程序中使用
BindView
,对我的活动没有任何问题。我知道Sean McQuillan的这篇文章,但没有解释如何使用
RecyclerView
。我三个月前开始编写代码,当我没有示例时,我很难理解所有内容。这很好。随着时间的推移,这将变得越来越容易:)