网站页面设计,网站建设公司怎么做的,python菜鸟教程官网,网站建设公司口碑排名一、问题描述 在学习Android可侧滑删除的RecyclerView的时候#xff0c;遇到了下面的报错 错误: SwipeDelAdapter不是抽象的, 并且未覆盖Adapter中的抽象方法onBindViewHolder(ViewHolder,int) public class SwipeDelAdapter extends RecyclerView.Adapter { ^ 在上面的…一、问题描述 在学习Android可侧滑删除的RecyclerView的时候遇到了下面的报错 错误: SwipeDelAdapter不是抽象的, 并且未覆盖Adapter中的抽象方法onBindViewHolder(ViewHolder,int) public class SwipeDelAdapter extends RecyclerView.Adapter { ^ 在上面的报错中SwipeDelAdapter是我自定义的Adapter类。 当我尝试通过AltEnter键修改代码时Android Studio建议我实现onBindViewHolder这个方法。开发界面中的报错一共有两个 而我的代码为
package com.cs.blackbox.adapter;import android.annotation.SuppressLint;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;import com.cs.blackbox.R;import java.util.List;import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;public class SwipeDelAdapter extends RecyclerView.Adapter {private List list;private onAdapterItemClickListener itemClickListener;public SwipeDelAdapter(List list) {this.list list;}NonNullOverridepublic ViewHolder onCreateViewHolder(NonNull ViewGroup parent, int viewType) {View view LayoutInflater.from(parent.getContext()).inflate(R.layout.item_text,parent,false);return new ViewHolder(view);}Overridepublic void onBindViewHolder(NonNull ViewHolder holder, SuppressLint(RecyclerView) final int position) {holder.sda_tv_content.setText(list.get(position).toString());holder.sda_tv_content.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View view) {itemClickListener.onItemClick(view,position);}});holder.sda_tv_delete.setOnClickListener(new View.OnClickListener() {Overridepublic void onClick(View view) {itemClickListener.onItemClick(view,position);}});}Overridepublic int getItemCount() {return list.size();}static class ViewHolder extends RecyclerView.ViewHolder{TextView sda_tv_content, sda_tv_delete;public ViewHolder(NonNull View itemView) {super(itemView);sda_tv_contentitemView.findViewById(R.id.sda_tv_content);sda_tv_deleteitemView.findViewById(R.id.sda_tv_delete);}}public void reFreshData(List list){this.listlist;notifyDataSetChanged();}public interface onAdapterItemClickListener{void onItemClick(View view,int selectPosition);}public void setItemClickListener(onAdapterItemClickListener itemClickListener) {this.itemClickListener itemClickListener;}
} 布局文件(item_text.xml)的代码为
?xml version1.0 encodingutf-8?
LinearLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:orientationhorizontalTextViewandroid:idid/sda_tv_contentandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:gravitycenter_horizontalandroid:text数据android:textSize18spandroid:padding15dp /TextViewandroid:idid/sda_tv_deleteandroid:layout_width60dpandroid:layout_heightmatch_parentandroid:background#FF0000android:gravitycenterandroid:paddingEnd16dpandroid:paddingStart16dpandroid:textColorcolor/whiteandroid:text删除android:textSize18sp/
/LinearLayout 我通过网络搜索尝试了一些办法但是没能解决。例如参考博客Android踩坑的解决方案将ViewHolder写到外面使它作为一个与Adapter类同级的静态内部类而不要放在Adapter类里面。该方案无法解决我的问题。以及参考博客BaseRecyAdapter不是抽象的的解决方案将ViewHolder类改为public static。该方案还是无法解决我的问题。 二、我的解决方法(仅供参考) 1、将ViewHolder类还是放在Adapter类的内部。 2、将XXXAdapter的继承修改一下原来是这样继承的
public class SwipeDelAdapter extends RecyclerView.Adapter{} 把它改成这样(添加一个XXXAdaper.XXXViewHolder其中XXXAdapter和XXXViewHolder都是自定义的类名字根据大家的项目和用途会有所不同)
public class SwipeDelAdapter extends RecyclerView.AdapterSwipeDelAdapter.ViewHolder {} 然后我的项目就build成功了。运行效果 三、参考 1、Android RecyclerView 二级列表侧滑简单实现主要是参考了这一份代码。然而这份代码的坑太多。 2、天生要强注定要凉的博客 3、Qin小宝的博客 4、9527xiha的博客