Java RecyclerView,从自定义的回收器视图适配器继承

Java RecyclerView,从自定义的回收器视图适配器继承,java,android,Java,Android,我有这两个类似的行为回收器视图适配器,它们之间唯一的区别是onclick方法和传递给它们的对象。所以,我正在考虑将类B设计为从recycler视图适配器继承,这样我就可以将构造函数更改为我想要的,而不是创建两个非常相似的类。有人能给我一些提示和见解如何实现这个想法吗 public class GroupRecycleAdapter extends RecyclerView.Adapter<GroupRecycleAdapter.GroupViewHolder>{ privat

我有这两个类似的行为回收器视图适配器,它们之间唯一的区别是onclick方法和传递给它们的对象。所以,我正在考虑将类B设计为从recycler视图适配器继承,这样我就可以将构造函数更改为我想要的,而不是创建两个非常相似的类。有人能给我一些提示和见解如何实现这个想法吗

    public class GroupRecycleAdapter extends RecyclerView.Adapter<GroupRecycleAdapter.GroupViewHolder>{
private List<Group> groupList;
private Context context;

public class GroupViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    TextView showingTextView, nameTextview;
    ImageView icon;

    public GroupViewHolder(View itemView){
        super(itemView);

        showingTextView = itemView.findViewById(R.id.group_children_edittext);
        nameTextview = itemView.findViewById(R.id.postMemberName);
        icon = itemView.findViewById(R.id.group_children_image);

        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Log.d(TAG, "onClicked " + getAdapterPosition());
        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setView(R.layout.member_input_popup);
        builder.setPositiveButton("CANCEL", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });
        builder.setNegativeButton("CONFIRM", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
    }
}

public GroupRecycleAdapter(List<Group> groupList, Context context){
    this.groupList = groupList;
    this.context = context;
}
public GroupRecycleAdapter(Context context){
    this.context = context;
}

@NonNull
@Override
public GroupViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.member_input_name_layout,parent,false);

    return new GroupViewHolder(itemView);
}

@Override
public void onBindViewHolder(@NonNull GroupViewHolder holder, int position) {
    String member = groupList.get(position).name;
    holder.showingTextView.setVisibility(View.GONE);
    holder.icon.setVisibility(View.GONE);
    holder.nameTextview.setText(member);
}

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

public void setGroup(List<Group> group) {
    groupList = group;
    notifyDataSetChanged();
}
}
public类GroupRecycleAdapter扩展了RecyclerView.Adapter{
私有列表组列表;
私人语境;
公共类GroupViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
文本视图显示文本视图,名称文本视图;
图像视图图标;
公共组视图持有者(视图项视图){
超级(项目视图);
showingTextView=itemView.findViewById(R.id.group\u children\u edittext);
nameTextview=itemView.findViewById(R.id.postMemberName);
icon=itemView.findviewbyd(R.id.group\u children\u image);
setOnClickListener(这个);
}
@凌驾
公共void onClick(视图v){
d(标记“onClicked”+getAdapterPosition());
AlertDialog.Builder=新建AlertDialog.Builder(上下文);
builder.setView(R.layout.member\u input\u弹出窗口);
setPositiveButton(“取消”,新建DialogInterface.OnClickListener()){
@凌驾
public void onClick(DialogInterface dialog,int which){
dialog.cancel();
}
});
setNegativeButton(“确认”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
}
});
AlertDialog=builder.create();
dialog.show();
}
}
公共GroupRecycleAdapter(列表groupList,上下文){
this.groupList=groupList;
this.context=上下文;
}
公共组RecycleAdapter(上下文){
this.context=上下文;
}
@非空
@凌驾
public GroupViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
View itemView=LayoutInflater.from(parent.getContext()).flate(R.layout.member\u input\u name\u layout,parent,false);
返回新的GroupViewHolder(itemView);
}
@凌驾
public void onBindViewHolder(@NonNull GroupViewHolder holder,int位置){
字符串成员=groupList.get(position).name;
holder.showingTextView.setVisibility(View.GONE);
holder.icon.setVisibility(View.GONE);
holder.nameTextview.setText(成员);
}
@凌驾
public int getItemCount(){
返回groupList.size();
}
公共无效集合组(列表组){
组列表=组;
notifyDataSetChanged();
}
}

您可以为GroupRecycleAdapter创建一个接口,并在使用此适配器的片段/活动中实现该接口。您可以通过适配器的构造函数传递该接口的实现

适配器样本 根据需要更改上述函数中的代码


适配器构造函数
public class GroupRecycleAdapter extends RecyclerView.Adapter<GroupRecycleAdapter.GroupViewHolder>{
  @NonNull
  private Link link;

  public GroupRecyclerAdapter(@NonNull Link link){
    this.link = link;
  }

  
  public class GroupViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    TextView showingTextView, nameTextview;
    ImageView icon;

    public GroupViewHolder(View itemView){
        super(itemView);

        showingTextView = itemView.findViewById(R.id.group_children_edittext);
        nameTextview = itemView.findViewById(R.id.postMemberName);
        icon = itemView.findViewById(R.id.group_children_image);

        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Log.d(TAG, "onClicked " + getAdapterPosition());
        Group group = groupList.get(getLayoutPosition());
        link.onItemClicked(v,group);
        //Shift this code to fragment/activity where Link interface is implemented
    }
  }


  public interface Link{
    void onItemClicked(View v,Group group);
  }
}
GroupRecycleAdapter.Link link = new GroupRecycleAdapter.Link(){
  public void onItemClicked(View v,Group group){
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
            builder.setView(R.layout.member_input_popup);
            builder.setPositiveButton("CANCEL", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });
            builder.setNegativeButton("CONFIRM", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                }
            });
    AlertDialog dialog = builder.create();
    dialog.show();
  }
} 
GroupRecyclerAdapter adapter = new GroupRecyclerAdapter(link);