
我遵循了Google Developer的YouTube频道的this教程,以实施AdMob原生快速广告.
我收到以下错误:
required: packagename.adapter.vIEwHolderfound : packagename.adapter.NativeExpressAdVIEwHolder这是我的onCreateVIEwHolder的样子:
public VIEwHolder onCreateVIEwHolder(VIEwGroup parent, int vIEwType) { switch (vIEwType) { case AD_VIEW_TYPE: VIEw nativeExpressLayoutVIEw = LayoutInflater.from(parent.getContext()).inflate(R.layout.native_express_add_container, parent, false); return new NativeExpressAdVIEwHolder(nativeExpressLayoutVIEw); case MENU_ITEM_VIEW_TYPE: default: VIEw myLayoutVIEw = LayoutInflater.from(parent.getContext()).inflate(R.layout.List, parent, false); return new VIEwHolder(myLayoutVIEw); }}这是我的2个不同的VIEwHolder类:
class VIEwHolder extends RecyclerVIEw.VIEwHolder implements VIEw.OnClickListener { VIEwHolder(VIEw itemVIEw) { super(itemVIEw); } }public class NativeExpressAdVIEwHolder extends RecyclerVIEw.VIEwHolder { NativeExpressAdVIEwHolder(VIEw vIEw) { super(vIEw); }}这是没有答案的类似问题:
> Error “Incompatible types” while adding NativeAds in recyclerView
> How to add NativeExpressAdView with Custom Model List Android?
编辑:
这是我要求的完整适配器:
public class MainActivityVIDeoAdapter extends Adapter<MainActivityVIDeoAdapter.VIEwHolder> {ArrayList<Bitmap> bitmapArrayList;Context context;LayoutInflater layoutInflater;VIEw myLayoutVIEw;ArrayList<PathModel> ThumbPathList;ArrayList<PathModel> VIDeoPathList = new ArrayList();static DBManager manager;long _ID;private static final int MENU_ITEM_VIEW_TYPE = 0;private static final int AD_VIEW_TYPE = 1;class VIEwHolder extends RecyclerVIEw.VIEwHolder implements VIEw.OnClickListener { //VIDeo Title TextVIEw vIDeoname; //VIDeo Image CircularImageVIEw vIDeoThumb; //PopupMenu Imagebutton vIEwholderOtions; VIEwHolder(VIEw itemVIEw) { super(itemVIEw); vIEwholderOtions = (Imagebutton) myLayoutVIEw.findVIEwByID(R.ID.vIEwholderOptions); vIDeoname = (TextVIEw) myLayoutVIEw.findVIEwByID(R.ID.filePath); vIDeoThumb = (CircularImageVIEw) myLayoutVIEw.findVIEwByID(R.ID.VIDeothumbnail); //VIEw onClick itemVIEw.setonClickListener(this); //Popup onClick vIEwholderOtions.setonClickListener(this); } //Handling click events @OverrIDe public voID onClick(VIEw v) { if (v == vIEwholderOtions) { int position = (int) v.getTag(); showPopupMenu(vIEwholderOtions, position); } }}public class NativeExpressAdVIEwHolder extends RecyclerVIEw.VIEwHolder { NativeExpressAdVIEwHolder(VIEw vIEw) { super(vIEw); }}public MainActivityVIDeoAdapter(Context context, ArrayList<PathModel> ThumbPathList, ArrayList<PathModel> VIDeoPathList) { this.context = context; this.ThumbPathList = ThumbPathList; this.VIDeoPathList = VIDeoPathList;}public RecyclerVIEw.VIEwHolder onCreateVIEwHolder(VIEwGroup parent, int vIEwType) { switch (vIEwType) { case AD_VIEW_TYPE: VIEw nativeExpressLayoutVIEw = LayoutInflater.from(parent.getContext()).inflate(R.layout.native_express_add_container, parent, false); return new NativeExpressAdVIEwHolder(nativeExpressLayoutVIEw); case MENU_ITEM_VIEW_TYPE: default: VIEw myLayoutVIEw = LayoutInflater.from(parent.getContext()).inflate(R.layout.List, parent, false); return new VIEwHolder(myLayoutVIEw); }}public voID onBindVIEwHolder(final VIEwHolder myHolder, final int position) { int vIEwType = getItemVIEwType(position); switch (vIEwType) { case AD_VIEW_TYPE: case MENU_ITEM_VIEW_TYPE: default: final PathModel vIDeoPathModel = this.VIDeoPathList.get(position); PathModel thumbathModel = this.ThumbPathList.get(position); file file = new file(vIDeoPathModel.getPath()); String filename = file.getname(); myHolder.vIDeoname.setText(filename); myHolder.vIDeoThumb.setimageURI(Uri.parse(thumbathModel.getPath())); myHolder.vIEwholderOtions.setTag(position); myHolder.itemVIEw.setonClickListener(new VIEw.OnClickListener() { @OverrIDe public voID onClick(VIEw v) { Intent intent= new Intent(context, VIDeoPlayerActivity.class); intent.putExtra("fromFA2", "fromFA2"); context.startActivity(intent); } }); }}解决方法:
您好@ClassA我发现您已经在onBindVIEwHolder()中导入了本地类而不是RecyclerVIEw.VIEwHolder
请检查以下代码,这可能会对您有所帮助.
public class MainActivityVIDeoAdapter extends RecyclerVIEw.Adapter<RecyclerVIEw.VIEwHolder> {/*------------------your constructor goes here-----------------*/ @OverrIDe public int getItemCount() { return 0; } public voID onBindVIEwHolder(final RecyclerVIEw.VIEwHolder myHolder, final int position) { int vIEwType = getItemVIEwType(position); switch (vIEwType) { case AD_VIEW_TYPE: break; case MENU_ITEM_VIEW_TYPE: break; } } public RecyclerVIEw.VIEwHolder onCreateVIEwHolder(VIEwGroup parent, int vIEwType) { switch (vIEwType) { case AD_VIEW_TYPE: VIEw nativeExpressLayoutVIEw = LayoutInflater.from(parent.getContext()).inflate(R.layout.native_express_add_container, parent, false); return new NativeExpressAdVIEwHolder(nativeExpressLayoutVIEw); case MENU_ITEM_VIEW_TYPE: VIEw myLayoutVIEw = LayoutInflater.from(parent.getContext()).inflate(R.layout.List, parent, false); return new VIEwHolder(myLayoutVIEw); } } class VIEwHolder extends RecyclerVIEw.VIEwHolder { VIEwHolder(VIEw itemVIEw) { super(itemVIEw); } } public class NativeExpressAdVIEwHolder extends RecyclerVIEw.VIEwHolder { NativeExpressAdVIEwHolder(VIEw vIEw) { super(vIEw); } }}该代码不包含您的变量和逻辑,该代码可完美导入和使用方法.
如果这样可以解决您的问题,请使该答案得到批准.
编码愉快.
以上是内存溢出为你收集整理的java-在onCreateViewHolder中使用不同的视图全部内容,希望文章能够帮你解决java-在onCreateViewHolder中使用不同的视图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)