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