package com.novelbook.android.adapter; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Context; import android.support.annotation.NonNull; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.StaggeredGridLayoutManager; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ProgressBar; import android.widget.TextView; //import com.androidquery.callback.AQuery2; import com.androidquery.callback.ImageOptions; /*import com.bytedance.sdk.openadsdk.DownloadStatusController; import com.bytedance.sdk.openadsdk.TTAdConstant; import com.bytedance.sdk.openadsdk.TTAppDownloadListener; import com.bytedance.sdk.openadsdk.TTFeedAd; import com.bytedance.sdk.openadsdk.TTImage; import com.bytedance.sdk.openadsdk.TTNativeAd; import com.novelbook.android.AD.toutiao.TToast; import com.novelbook.android.BookActivity;*/ import com.novelbook.android.R; import com.novelbook.android.db.Novel; import com.novelbook.android.netutils.NetUtil; import com.novelbook.android.utils.CommonUtil; import com.novelbook.android.utils.ImageUtil; import com.novelbook.android.utils.MyImageLoader; import com.novelbook.android.utils.OnItemClickListener; import com.qq.e.ads.nativ.NativeExpressADView; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.WeakHashMap; import butterknife.BindView; import butterknife.ButterKnife; import okhttp3.internal.Util; import static com.novelbook.android.utils.ImageUtil.loader; public class BookListAdapter extends RecyclerView.Adapter< RecyclerView.ViewHolder> { private final static String TAG= BookListAdapter.class.getSimpleName(); private final int EMPTY_VIEW = 1; private static final int TYPE_ITEM = 2; private static final int TYPE_FOOTER = 3; private static final int NO_FOOTER = 4; private static final int ITEM_VIEW_TYPE_GROUP_PIC_AD =5; private static final int ITEM_VIEW_TYPE_SMALL_PIC_AD = 6; private static final int ITEM_VIEW_TYPE_LARGE_PIC_AD = 7; private static final int ITEM_VIEW_TYPE_VIDEO = 8; private static final int ITEM_VIEW_TYPE_QQ_NATIVE_EXPRESS = 9; // private MyImageLoader loader = new MyImageLoader(); private Context mContext; private List mDatas ; private OnItemClickListener mOnItemClickListener; private int listItemID; //private List mBooks; private LayoutInflater mInflater; //上拉加载更多 public static final int PULLUP_LOAD_MORE = 0; //正在加载中 public static final int LOADING_MORE = 1; //没有加载更多 隐藏 public static final int NO_LOAD_MORE = 2; //上拉加载更多状态-默认为0 private int mLoadMoreStatus = 2; private boolean showFootView =false; private float percent =0; private int norecord =R.string.noRecord; private boolean isShowTop=false; public boolean isShowTop() { return isShowTop; } public void setShowTop(boolean showTop) { isShowTop = showTop; } public void setNorecord(int norecord) { this.norecord = norecord; } public void setPercent(float percent) { this.percent = percent; } // private AQuery2 mAQuery; // private Map mTTAppDownloadListenerMap = new WeakHashMap<>(); public void setShowFootView(boolean showFootView) { this.showFootView = showFootView; } public BookListAdapter(Context context, List datas) { mContext = context; mInflater = LayoutInflater.from(mContext); mDatas = datas; // this.mAQuery = new AQuery2(context); } public BookListAdapter(Context context, List mBooks, int listItemID, OnItemClickListener clickLitener) { this.mContext =context; this.mDatas = mBooks; this.mOnItemClickListener = clickLitener; this.listItemID = listItemID; mInflater = LayoutInflater.from(mContext); // this.mAQuery = new AQuery2(context); } public BookListAdapter(Context context, OnItemClickListener clickLitener) { this.mContext = context; this.mOnItemClickListener = clickLitener; // this.mAQuery = new AQuery2(context); } public void setListener(OnItemClickListener clickLitener){ this.mOnItemClickListener = clickLitener; } @Override public int getItemViewType(int position) { if (mDatas.size() == 0) { return EMPTY_VIEW; }else if ( position < mDatas.size()) { //最后一个item设置为footerView if (mDatas.get(position) instanceof Novel) { return TYPE_ITEM; } /* else if (mDatas.get(position) instanceof TTFeedAd) { TTFeedAd ad = (TTFeedAd) mDatas.get(position); Log.d(TAG, "getItemViewType: ad.getImageMode()= " +ad.getImageMode()); if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_SMALL_IMG) { return ITEM_VIEW_TYPE_SMALL_PIC_AD; } else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_LARGE_IMG) { return ITEM_VIEW_TYPE_LARGE_PIC_AD; } else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_GROUP_IMG) { return ITEM_VIEW_TYPE_GROUP_PIC_AD; } else if (ad.getImageMode() == TTAdConstant.IMAGE_MODE_VIDEO) { return ITEM_VIEW_TYPE_VIDEO; } return ITEM_VIEW_TYPE_SMALL_PIC_AD; }*/ else if(mDatas.get(position) instanceof NativeExpressADView ){ return ITEM_VIEW_TYPE_QQ_NATIVE_EXPRESS; } Log.d(TAG, String.format("getItemViewType exception 1: position %s, mDatas.get(position) %s ,mDatas.size %s",position, mDatas.get(position),mDatas.size() )); } else if ( position == mDatas.size()) { //最后一个item设置为footerView if(!showFootView){ return NO_FOOTER; } return TYPE_FOOTER; } else { return TYPE_ITEM; } Log.d(TAG, String.format("getItemViewType exception 2: position %s, mDatas.get(position) %s ,mDatas.size %s",position, mDatas.get(position),mDatas.size() )); return EMPTY_VIEW; // return super.getItemViewType(position); } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case TYPE_FOOTER: return new FooterViewHolder(mInflater.inflate(R.layout.load_more_footview_layout, parent, false)); case EMPTY_VIEW: return new EmptyViewHolder (mInflater.inflate(R.layout.recycle_list_empty_item, parent, false)); case NO_FOOTER: return new NoShowViewHolder (mInflater.inflate(R.layout.recycle_list_noshow_item, parent, false)); case ITEM_VIEW_TYPE_SMALL_PIC_AD: return new SmallAdViewHolder(mInflater.inflate(R.layout.listitem_ad_small_pic, parent, false)); case ITEM_VIEW_TYPE_LARGE_PIC_AD: return new LargeAdViewHolder(mInflater.inflate(R.layout.listitem_ad_large_pic, parent, false)); case ITEM_VIEW_TYPE_GROUP_PIC_AD: return new GroupAdViewHolder(mInflater.inflate(R.layout.listitem_ad_group_pic, parent, false)); case ITEM_VIEW_TYPE_VIDEO: return new VideoAdViewHolder(mInflater.inflate(R.layout.listitem_ad_large_video, parent, false)); case ITEM_VIEW_TYPE_QQ_NATIVE_EXPRESS: return new QQ_ExpressViewHolder(mInflater.inflate(R.layout.listitem_ad_qq_item_express, parent, false)); default: return new MyViewHolder( mInflater.inflate(listItemID, parent, false)); } } public void setBookList(List bookLists){ this.mDatas = bookLists; notifyDataSetChanged(); } public void setParameters(List mDatas, int listItemID) { this.mDatas = mDatas; this.listItemID = listItemID; } public void setOnItemClickLitener(OnItemClickListener mOnItemClickLitener) { this.mOnItemClickListener = mOnItemClickLitener; } @Override public void onBindViewHolder(RecyclerView.ViewHolder hd, int position) { // TTFeedAd ttFeedAd; if (hd instanceof FooterViewHolder) { FooterViewHolder footerViewHolder = (FooterViewHolder) hd; switch (mLoadMoreStatus) { case PULLUP_LOAD_MORE: footerViewHolder.mTvLoadText.setText(String.format("上拉加载更多..")); break; case LOADING_MORE: footerViewHolder.mTvLoadText.setText("正加载更多..."); break; case NO_LOAD_MORE: if(!showFootView){ footerViewHolder.mLoadLayout.setVisibility(View.GONE); footerViewHolder.itemView.setVisibility(View.GONE); return; } //隐藏加载更多 footerViewHolder.mTvLoadText.setText("到底了"); break; } }else if (hd instanceof EmptyViewHolder) { EmptyViewHolder holder = (EmptyViewHolder) hd; holder.tvEmpty.setVisibility(View.GONE); if (mDatas == null || mDatas != null && mDatas.size() == 0) { holder.tvEmpty.setVisibility(View.VISIBLE); holder.tvEmpty.setText(norecord); } }else if (hd instanceof QQ_ExpressViewHolder) { QQ_ExpressViewHolder holder = (QQ_ExpressViewHolder)hd; // holder.title.setVisibility(View.VISIBLE); final NativeExpressADView adView = (NativeExpressADView) mDatas.get(position); // mAdViewPositionMap.put(adView, position); // 广告在列表中的位置是可以被更新的 if (holder.container.getChildCount() > 0 && holder.container.getChildAt(0) == adView) { return; } if (holder.container.getChildCount() > 0) { holder.container.removeAllViews(); } if (adView.getParent() != null) { ((ViewGroup) adView.getParent()).removeView(adView); } holder.container.addView(adView); adView.render(); // 调用render方法后sdk才会开始展示广告 } else if (hd instanceof MyViewHolder && mDatas.get(position) instanceof Novel) { Novel novel =(Novel) mDatas.get(position); MyViewHolder holder = (MyViewHolder)hd; holder.tvTitle.setText(novel.getName()); if (holder.tvAuthor != null) holder.tvAuthor.setText(novel.getAuthor()); if (holder.tvCate != null) holder.tvCate.setText(novel.getNovelType()); if (holder.tvDesc != null) holder.tvDesc.setText(novel.getDesc()); if (holder.tvLastRead != null) holder.tvLastRead.setText(CommonUtil.getDateString( novel.getLastVisit() )); // if (holder.tvProgress != null) holder.tvProgress.setText( String.format("上次看到第 %s 章,共%s章",mDatas.get(position).getLastReadChapt(),mDatas.get(position).getChaptCnt()) ); if (holder.tvProgress != null) { String lastReadChapt = novel.getLastReadChaptName(); if( TextUtils.isEmpty(lastReadChapt)){ holder.tvProgress.setVisibility(View.GONE); }else{ holder.tvProgress.setVisibility(View.VISIBLE); } // lastReadChapt = TextUtils.isEmpty(lastReadChapt)? "":lastReadChapt; // lastReadChapt =lastReadChapt.replace("null",""); holder.tvProgress.setText( lastReadChapt ); } if (holder.tvReadtime != null) holder.tvReadtime.setText( "总计阅读了 "+CommonUtil.getTimeCnt4Read( novel.getReadtime() ,true) ); if (holder.tvStatus != null) holder.tvStatus.setText(novel.getProgress()); if (holder.imageView != null/* && !TextUtils.isEmpty(mDatas.get(position).getCover())*/) { // ImageUtil.loadImage(mContext, mDatas.get(position).getCover(), holder.imageView); if(!novel.isLocalBook()) { loader.displayImage(mContext, NetUtil.getCoverUrl(novel.getCover()), holder.imageView); }else{ holder.imageView.setImageResource(R.drawable.blankcover); // loader.displayImage(mContext, R.drawable.blankcover, holder.imageView); } } if (holder.tvImportTitle != null) { holder.tvImportTitle.setVisibility(View.GONE); holder.tvImportTitle.setText(""); if(novel.isLocalBook()) { holder.tvImportTitle.setVisibility(View.VISIBLE); holder.tvImportTitle.setText(novel.getName()); } } if (holder.imageTop != null) { if( novel.isTop()){ holder.imageTop.setVisibility(View.VISIBLE); }else{ holder.imageTop.setVisibility(View.GONE); } } if(isShowTop) { if (holder.imageTop1 != null) { if (position == 0) { holder.imageTop1.setVisibility(View.VISIBLE); } else { holder.imageTop1.setVisibility(View.GONE); } } if (holder.imageTop2 != null) { if (position == 1) { holder.imageTop2.setVisibility(View.VISIBLE); } else { holder.imageTop2.setVisibility(View.GONE); } } if (holder.imageTop3 != null) { if (position == 2) { holder.imageTop3.setVisibility(View.VISIBLE); } else { holder.imageTop3.setVisibility(View.GONE); } } } if (holder.imageUpdate != null) { if( novel.isUpdated()){ Log.d(TAG, String.format("checkshelf:novel %s has new update",novel.getName())); holder.imageUpdate.setVisibility(View.VISIBLE); }else{ holder.imageUpdate.setVisibility(View.GONE); } } if (holder.tvNum != null) holder.tvNum.setText("999"); // 如果设置了回调,则设置点击事件 if (mOnItemClickListener != null) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int pos = holder.getLayoutPosition(); mOnItemClickListener.onItemClick(holder.itemView, pos); } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { int pos = holder.getLayoutPosition(); mOnItemClickListener.onItemLongClick(holder.itemView, pos); return false; } }); } } /* else if (hd instanceof SmallAdViewHolder) { ttFeedAd =(TTFeedAd) mDatas.get(position); SmallAdViewHolder smallAdViewHolder = (SmallAdViewHolder) hd; bindData(smallAdViewHolder, ttFeedAd); if (ttFeedAd.getImageList() != null && !ttFeedAd.getImageList().isEmpty()) { TTImage image = ttFeedAd.getImageList().get(0); if (image != null && image.isValid()) { mAQuery.id(smallAdViewHolder.mSmallImage).image(image.getImageUrl()); } } } else if (hd instanceof LargeAdViewHolder) { ttFeedAd =(TTFeedAd) mDatas.get(position); LargeAdViewHolder largeAdViewHolder = (LargeAdViewHolder) hd; bindData(largeAdViewHolder, ttFeedAd); if (ttFeedAd.getImageList() != null && !ttFeedAd.getImageList().isEmpty()) { TTImage image = ttFeedAd.getImageList().get(0); if (image != null && image.isValid()) { mAQuery.id(largeAdViewHolder.mLargeImage).image(image.getImageUrl()); } } } else if (hd instanceof GroupAdViewHolder) { ttFeedAd =(TTFeedAd) mDatas.get(position); GroupAdViewHolder groupAdViewHolder = (GroupAdViewHolder) hd; bindData(groupAdViewHolder, ttFeedAd); if (ttFeedAd.getImageList() != null && ttFeedAd.getImageList().size() >= 3) { TTImage image1 = ttFeedAd.getImageList().get(0); TTImage image2 = ttFeedAd.getImageList().get(1); TTImage image3 = ttFeedAd.getImageList().get(2); if (image1 != null && image1.isValid()) { mAQuery.id(groupAdViewHolder.mGroupImage1).image(image1.getImageUrl()); } if (image2 != null && image2.isValid()) { mAQuery.id(groupAdViewHolder.mGroupImage2).image(image2.getImageUrl()); } if (image3 != null && image3.isValid()) { mAQuery.id(groupAdViewHolder.mGroupImage3).image(image3.getImageUrl()); } } } else if (hd instanceof VideoAdViewHolder) { ttFeedAd = (TTFeedAd)mDatas.get(position); VideoAdViewHolder videoAdViewHolder = (VideoAdViewHolder) hd; bindData(videoAdViewHolder, ttFeedAd); ttFeedAd.setVideoAdListener(new TTFeedAd.VideoAdListener() { @Override public void onVideoLoad(TTFeedAd ad) { } @Override public void onVideoError(int errorCode, int extraCode) { } @Override public void onVideoAdStartPlay(TTFeedAd ad) { } @Override public void onVideoAdPaused(TTFeedAd ad) { } @Override public void onVideoAdContinuePlay(TTFeedAd ad) { } }); if (videoAdViewHolder.videoView != null) { View video = ttFeedAd.getAdView(); if (video != null) { if (video.getParent() == null) { videoAdViewHolder.videoView.removeAllViews(); videoAdViewHolder.videoView.addView(video); } } } }*/ } @Override public int getItemCount() { return mDatas.size()+1; } public void addData(int position) { // mDatas.add(position, "Insert One"); notifyItemInserted(position); } public void removeData(int position) { mDatas.remove(position); notifyItemRemoved(position); } //to set booklist updated, used in shelf public void setUpdate(List lstUpdate) { } public class FooterViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.pbLoad) ProgressBar mPbLoad; @BindView(R.id.tvLoadText) TextView mTvLoadText; @BindView(R.id.loadLayout) LinearLayout mLoadLayout; public FooterViewHolder(View itemView) { super(itemView); ButterKnife.bind(this,itemView); } } class EmptyViewHolder extends RecyclerView.ViewHolder { @BindView(R.id.tvLoadText) TextView tvEmpty; public EmptyViewHolder(View itemView) { super(itemView); ButterKnife.bind(this,itemView); } } class NoShowViewHolder extends RecyclerView.ViewHolder { public NoShowViewHolder(View itemView) { super(itemView); } } public void AddHeaderItem(List items) { if(mDatas.size()>3 &&( mDatas.get(3) instanceof NativeExpressADView /*|| mDatas.get(3) instanceof TTFeedAd*/) ){ return; } int p = mDatas.size()>3?3:0; if( mDatas.get(p) instanceof NativeExpressADView){ return; } mDatas.addAll(p, items); notifyDataSetChanged(); } public void setData(List items) { // mDatas.add(position, "Insert One"); mDatas = items; notifyDataSetChanged(); } public void AddFooterItem(List items) { mDatas.addAll(items); notifyDataSetChanged(); } /** * 更新加载更多状态 * @param status */ public void changeMoreStatus(int status){ mLoadMoreStatus=status; notifyDataSetChanged(); } @Override public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) { super.onAttachedToRecyclerView(recyclerView); RecyclerView.LayoutManager layout = recyclerView.getLayoutManager(); if (layout != null && layout instanceof GridLayoutManager) { final GridLayoutManager manager = (GridLayoutManager) layout; manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int position) { int type = getItemViewType(position); if (/*type == ITEM_VIEW_TYPE_LOAD_MORE ||*/ type == ITEM_VIEW_TYPE_VIDEO) { return manager.getSpanCount(); } return 1; } }); } } @Override public void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) { //noinspection unchecked super.onViewAttachedToWindow(holder); ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams(); if (lp != null && lp instanceof StaggeredGridLayoutManager.LayoutParams) { int position = holder.getLayoutPosition(); int type = getItemViewType(position); if (/*type == ITEM_VIEW_TYPE_LOAD_MORE || */type == ITEM_VIEW_TYPE_VIDEO) { StaggeredGridLayoutManager.LayoutParams p = (StaggeredGridLayoutManager.LayoutParams) lp; p.setFullSpan(true); } } } @SuppressWarnings("WeakerAccess") private static class VideoAdViewHolder extends AdViewHolder { @SuppressWarnings("CanBeFinal") FrameLayout videoView; @SuppressWarnings("RedundantCast") public VideoAdViewHolder(View itemView) { super(itemView); mTitle = (TextView) itemView.findViewById(R.id.tv_listitem_ad_title); mDescription = (TextView) itemView.findViewById(R.id.tv_listitem_ad_desc); mSource = (TextView) itemView.findViewById(R.id.tv_listitem_ad_source); videoView = (FrameLayout) itemView.findViewById(R.id.iv_listitem_video); mIcon = (ImageView) itemView.findViewById(R.id.iv_listitem_icon); mCreativeButton = (Button) itemView.findViewById(R.id.btn_listitem_creative); // mStopButton = (Button) itemView.findViewById(R.id.btn_listitem_stop); // mRemoveButton = (Button) itemView.findViewById(R.id.btn_listitem_remove); } } private static class LargeAdViewHolder extends AdViewHolder { ImageView mLargeImage; @SuppressWarnings("RedundantCast") public LargeAdViewHolder(View itemView) { super(itemView); mTitle = (TextView) itemView.findViewById(R.id.tv_listitem_ad_title); mDescription = (TextView) itemView.findViewById(R.id.tv_listitem_ad_desc); mSource = (TextView) itemView.findViewById(R.id.tv_listitem_ad_source); mLargeImage = (ImageView) itemView.findViewById(R.id.iv_listitem_image); mIcon = (ImageView) itemView.findViewById(R.id.iv_listitem_icon); mCreativeButton = (Button) itemView.findViewById(R.id.btn_listitem_creative); // mStopButton = (Button) itemView.findViewById(R.id.btn_listitem_stop); // mRemoveButton = (Button) itemView.findViewById(R.id.btn_listitem_remove); } } private static class SmallAdViewHolder extends AdViewHolder { ImageView mSmallImage; @SuppressWarnings("RedundantCast") public SmallAdViewHolder(View itemView) { super(itemView); mTitle = (TextView) itemView.findViewById(R.id.tv_listitem_ad_title); mSource = (TextView) itemView.findViewById(R.id.tv_listitem_ad_source); mDescription = (TextView) itemView.findViewById(R.id.tv_listitem_ad_desc); mSmallImage = (ImageView) itemView.findViewById(R.id.iv_listitem_image); mIcon = (ImageView) itemView.findViewById(R.id.iv_listitem_icon); mCreativeButton = (Button) itemView.findViewById(R.id.btn_listitem_creative); // mStopButton = (Button) itemView.findViewById(R.id.btn_listitem_stop); // mRemoveButton = (Button) itemView.findViewById(R.id.btn_listitem_remove); } } @SuppressWarnings("CanBeFinal") private static class GroupAdViewHolder extends AdViewHolder { ImageView mGroupImage1; ImageView mGroupImage2; ImageView mGroupImage3; @SuppressWarnings("RedundantCast") public GroupAdViewHolder(View itemView) { super(itemView); mTitle = (TextView) itemView.findViewById(R.id.tv_listitem_ad_title); mSource = (TextView) itemView.findViewById(R.id.tv_listitem_ad_source); mDescription = (TextView) itemView.findViewById(R.id.tv_listitem_ad_desc); mGroupImage1 = (ImageView) itemView.findViewById(R.id.iv_listitem_image1); mGroupImage2 = (ImageView) itemView.findViewById(R.id.iv_listitem_image2); mGroupImage3 = (ImageView) itemView.findViewById(R.id.iv_listitem_image3); mIcon = (ImageView) itemView.findViewById(R.id.iv_listitem_icon); mCreativeButton = (Button) itemView.findViewById(R.id.btn_listitem_creative); // mStopButton = (Button) itemView.findViewById(R.id.btn_listitem_stop); // mRemoveButton = (Button) itemView.findViewById(R.id.btn_listitem_remove); } } private static class AdViewHolder extends RecyclerView.ViewHolder { ImageView mIcon; Button mCreativeButton; TextView mTitle; TextView mDescription; TextView mSource; // Button mStopButton; // Button mRemoveButton; public AdViewHolder(View itemView) { super(itemView); } } class QQ_ExpressViewHolder extends RecyclerView.ViewHolder { // public TextView title; public ViewGroup container; public QQ_ExpressViewHolder(View view) { super(view); // title = (TextView) view.findViewById(R.id.title); container = (ViewGroup) view.findViewById(R.id.express_ad_container); } } /* private void bindData(final AdViewHolder adViewHolder, TTFeedAd ad) { //可以被点击的view, 也可以把convertView放进来意味item可被点击 List clickViewList = new ArrayList<>(); clickViewList.add(adViewHolder.itemView); //触发创意广告的view(点击下载或拨打电话) List creativeViewList = new ArrayList<>(); creativeViewList.add(adViewHolder.mCreativeButton); //如果需要点击图文区域也能进行下载或者拨打电话动作,请将图文区域的view传入 // creativeViewList.add(convertView); //重要! 这个涉及到广告计费,必须正确调用。convertView必须使用ViewGroup。 ad.registerViewForInteraction((ViewGroup) adViewHolder.itemView, clickViewList, creativeViewList, new TTNativeAd.AdInteractionListener() { @Override public void onAdClicked(View view, TTNativeAd ad) { if (ad != null) { // TToast.show(mContext, "广告" + ad.getTitle() + "被点击"); } } @Override public void onAdCreativeClick(View view, TTNativeAd ad) { if (ad != null) { // TToast.show(mContext, "广告" + ad.getTitle() + "被创意按钮被点击"); } } @Override public void onAdShow(TTNativeAd ad) { if (ad != null) { // TToast.show(mContext, "广告" + ad.getTitle() + "展示"); } } }); adViewHolder.mTitle.setText(ad.getTitle()); adViewHolder.mDescription.setText(ad.getDescription()); adViewHolder.mSource.setText(ad.getSource() == null ? "广告来源" : ad.getSource()); TTImage icon = ad.getIcon(); if (icon != null && icon.isValid()) { ImageOptions options = new ImageOptions(); mAQuery.id(adViewHolder.mIcon).image(icon.getImageUrl(), options); } Button adCreativeButton = adViewHolder.mCreativeButton; switch (ad.getInteractionType()) { case TTAdConstant.INTERACTION_TYPE_DOWNLOAD: //如果初始化ttAdManager.createAdNative(getApplicationContext())没有传入activity 则需要在此传activity,否则影响使用Dislike逻辑 if (mContext instanceof Activity) { ad.setActivityForDownloadApp((Activity) mContext); } adCreativeButton.setVisibility(View.VISIBLE); // adViewHolder.mStopButton.setVisibility(View.VISIBLE); // adViewHolder.mRemoveButton.setVisibility(View.VISIBLE); bindDownloadListener(adCreativeButton, adViewHolder, ad); //绑定下载状态控制器 bindDownLoadStatusController(adViewHolder, ad); break; case TTAdConstant.INTERACTION_TYPE_DIAL: adCreativeButton.setVisibility(View.VISIBLE); adCreativeButton.setText("立即拨打"); // adViewHolder.mStopButton.setVisibility(View.GONE); // adViewHolder.mRemoveButton.setVisibility(View.GONE); break; case TTAdConstant.INTERACTION_TYPE_LANDING_PAGE: case TTAdConstant.INTERACTION_TYPE_BROWSER: // adCreativeButton.setVisibility(View.GONE); adCreativeButton.setVisibility(View.VISIBLE); adCreativeButton.setText("查看详情"); // adViewHolder.mStopButton.setVisibility(View.GONE); // adViewHolder.mRemoveButton.setVisibility(View.GONE); break; default: adCreativeButton.setVisibility(View.GONE); // adViewHolder.mStopButton.setVisibility(View.GONE); // adViewHolder.mRemoveButton.setVisibility(View.GONE); // TToast.show(mContext, "交互类型异常"); } } private void bindDownLoadStatusController(AdViewHolder adViewHolder, final TTFeedAd ad) { final DownloadStatusController controller = ad.getDownloadStatusController(); *//* adViewHolder.mStopButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (controller != null) { controller.changeDownloadStatus(); // TToast.show(mContext, "改变下载状态"); Log.d(TAG, "改变下载状态"); } } }); adViewHolder.mRemoveButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (controller != null) { controller.cancelDownload(); // TToast.show(mContext, "取消下载"); Log.d(TAG, "取消下载"); } } });*//* } private void bindDownloadListener(final Button adCreativeButton, final AdViewHolder adViewHolder, TTFeedAd ad) { TTAppDownloadListener downloadListener = new TTAppDownloadListener() { @Override public void onIdle() { if (!isValid()) { return; } adCreativeButton.setText("开始下载"); // adViewHolder.mStopButton.setText("开始下载"); } @SuppressLint("SetTextI18n") @Override public void onDownloadActive(long totalBytes, long currBytes, String fileName, String appName) { if (!isValid()) { return; } if (totalBytes <= 0L) { adCreativeButton.setText("下载中 percent: 0"); } else { adCreativeButton.setText("下载中 percent: " + (currBytes * 100 / totalBytes)); } // adViewHolder.mStopButton.setText("下载中"); } @SuppressLint("SetTextI18n") @Override public void onDownloadPaused(long totalBytes, long currBytes, String fileName, String appName) { if (!isValid()) { return; } if (totalBytes <= 0L) { adCreativeButton.setText("下载中 percent: 0"); } else { adCreativeButton.setText("下载暂停 percent: " + (currBytes * 100 / totalBytes)); } // adViewHolder.mStopButton.setText("下载暂停"); } @Override public void onDownloadFailed(long totalBytes, long currBytes, String fileName, String appName) { if (!isValid()) { return; } adCreativeButton.setText("重新下载"); // adViewHolder.mStopButton.setText("重新下载"); } @Override public void onInstalled(String fileName, String appName) { if (!isValid()) { return; } adCreativeButton.setText("点击打开"); // adViewHolder.mStopButton.setText("点击打开"); } @Override public void onDownloadFinished(long totalBytes, String fileName, String appName) { if (!isValid()) { return; } adCreativeButton.setText("点击安装"); // adViewHolder.mStopButton.setText("点击安装"); } @SuppressWarnings("BooleanMethodIsAlwaysInverted") private boolean isValid() { return mTTAppDownloadListenerMap.get(adViewHolder) == this; } }; //一个ViewHolder对应一个downloadListener, isValid判断当前ViewHolder绑定的listener是不是自己 ad.setDownloadListener(downloadListener); // 注册下载监听器 mTTAppDownloadListenerMap.put(adViewHolder, downloadListener); }*/ }