Java 如何在带有resourcecursoradapter((不替换任何数据项))的recyclerview中使用本机admob广告
我正在尝试在使用resourcecursoradapter适配器的recyclerview中添加admob本机广告。。问题是 1-它使应用程序崩溃 2-它用admob ads替换recyclerview数据项 这是我的密码Java 如何在带有resourcecursoradapter((不替换任何数据项))的recyclerview中使用本机admob广告,java,android,admob,google-admob,Java,Android,Admob,Google Admob,我正在尝试在使用resourcecursoradapter适配器的recyclerview中添加admob本机广告。。问题是 1-它使应用程序崩溃 2-它用admob ads替换recyclerview数据项 这是我的密码 public class EntriesCursorAdapter extends ResourceCursorAdapter { private final Uri mUri; private final boolean mShowFeedInfo;
public class EntriesCursorAdapter extends ResourceCursorAdapter {
private final Uri mUri;
private final boolean mShowFeedInfo;
private int mIdPos, mTitlePos, mMainImgPos, mDatePos, mIsReadPos, mFavoritePos, mFeedIdPos, mFeedNamePos;
public static final int Ads_view_type = 11;
public EntriesCursorAdapter(Context context, Uri uri, Cursor cursor, boolean showFeedInfo) {
super(context, PrefUtils.getInt(PrefUtils.NEWS_FORMAT_int,R.layout.item_entry_list2), cursor, 0);
mUri = uri;
mShowFeedInfo = showFeedInfo;
reinit(cursor);
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
final int position = cursor.getPosition();
final int viewtype = getItemViewType(position);
View itemView ;
if(viewtype == Ads_view_type) {
final LayoutInflater inflater = LayoutInflater.from(context);
itemView = inflater.inflate(R.layout.native_ads, parent, false);
if (itemView.getTag(R.id.holder) == null) {
AdsHolder ads_holder = new AdsHolder();
ads_holder.adView = (NativeExpressAdView) itemView.findViewById(R.id.adView2);
itemView.setTag(R.id.holder, ads_holder);
} return itemView;
}
else {
final LayoutInflater inflater = LayoutInflater.from(context);
itemView = inflater.inflate(PrefUtils.getInt(PrefUtils.NEWS_FORMAT_int, R.layout.item_entry_list2), parent, false);
if (itemView.getTag(R.id.holder) == null) {
ViewHolder holder = new ViewHolder();
holder.titleTextView = (TextView) itemView.findViewById(android.R.id.text1);
holder.dateTextView = (TextView) itemView.findViewById(android.R.id.text2);
holder.mainImgView = (ImageView) itemView.findViewById(R.id.main_icon);
holder.starImgView = (ImageView) itemView.findViewById(R.id.favorite_icon);
itemView.setTag(R.id.holder, holder);
}
return itemView;
}
}
@Override
public int getItemViewType(int position) {
if(position % 6 ==0)
{return Ads_view_type;}
else {
return super.getItemViewType(position);
}
}
@Override
public void bindView(View view, final Context context, Cursor cursor) {
final int position = cursor.getPosition();
final int viewtype = getItemViewType(position);
if (viewtype == Ads_view_type) {
try {
AdsHolder adsHolder = (AdsHolder) view.getTag(R.id.holder);
AdRequest request = new AdRequest.Builder()
.addTestDevice("ca-app-pub-5647351014779121/8591922893")
.build();
adsHolder.adView.loadAd(request);
} catch (Exception e) {
}
} else {
try {
ViewHolder holder = (ViewHolder) view.getTag(R.id.holder);
String titleText = cursor.getString(mTitlePos);
holder.titleTextView.setText(titleText);
final long feedId = cursor.getLong(mFeedIdPos);
String feedName = cursor.getString(mFeedNamePos);
String mainImgUrl = cursor.getString(mMainImgPos);
mainImgUrl = TextUtils.isEmpty(mainImgUrl) ? null : NetworkUtils.getDownloadedOrDistantImageUrl(cursor.getLong(mIdPos), mainImgUrl);
ColorGenerator generator = ColorGenerator.DEFAULT;
int color = generator.getColor(feedId); // The color is specific to the feedId (which shouldn't change)
String lettersForName = feedName != null ? (feedName.length() < 2 ? feedName.toUpperCase() : feedName.substring(0, 2).toUpperCase()) : "";
TextDrawable letterDrawable = TextDrawable.builder().buildRect(lettersForName, color);
if (mainImgUrl != null) {
Glide.with(context).load(mainImgUrl).centerCrop().placeholder(letterDrawable).error(letterDrawable).into(holder.mainImgView);
} else {
Glide.clear(holder.mainImgView);
holder.mainImgView.setImageDrawable(letterDrawable);
}
holder.isFavorite = cursor.getInt(mFavoritePos) == 1;
holder.starImgView.setVisibility(holder.isFavorite ? View.VISIBLE : View.INVISIBLE);
if (mShowFeedInfo && mFeedNamePos > -1) {
if (feedName != null) {
holder.dateTextView.setText(Html.fromHtml("<font color='#247ab0'>" + feedName + "</font>" + Constants.COMMA_SPACE + StringUtils.getDateTimeString(cursor.getLong(mDatePos))));
} else {
holder.dateTextView.setText(StringUtils.getDateTimeString(cursor.getLong(mDatePos)));
}
} else {
holder.dateTextView.setText(StringUtils.getDateTimeString(cursor.getLong(mDatePos)));
}
if (cursor.isNull(mIsReadPos)) {
holder.titleTextView.setEnabled(true);
holder.dateTextView.setEnabled(true);
holder.isRead = false;
} else {
holder.titleTextView.setEnabled(false);
holder.dateTextView.setEnabled(false);
holder.isRead = true;
}
} catch (Exception e) {}
}
}
public void toggleReadState(final long id, View view) {
final ViewHolder holder = (ViewHolder) view.getTag(R.id.holder);
if (holder != null) { // should not happen, but I had a crash with this on PlayStore...
holder.isRead = !holder.isRead;
if (holder.isRead) {
holder.titleTextView.setEnabled(false);
holder.dateTextView.setEnabled(false);
} else {
holder.titleTextView.setEnabled(true);
holder.dateTextView.setEnabled(true);
}
new Thread() {
@Override
public void run() {
ContentResolver cr = MainApplication.getContext().getContentResolver();
Uri entryUri = ContentUris.withAppendedId(mUri, id);
cr.update(entryUri, holder.isRead ? FeedData.getReadContentValues() : FeedData.getUnreadContentValues(), null, null);
}
}.start();
}
}
public void toggleFavoriteState(final long id, View view) {
final ViewHolder holder = (ViewHolder) view.getTag(R.id.holder);
if (holder != null) { // should not happen, but I had a crash with this on PlayStore...
holder.isFavorite = !holder.isFavorite;
if (holder.isFavorite) {
holder.starImgView.setVisibility(View.VISIBLE);
} else {
holder.starImgView.setVisibility(View.INVISIBLE);
}
new Thread() {
@Override
public void run() {
ContentValues values = new ContentValues();
values.put(EntryColumns.IS_FAVORITE, holder.isFavorite ? 1 : 0);
ContentResolver cr = MainApplication.getContext().getContentResolver();
Uri entryUri = ContentUris.withAppendedId(mUri, id);
cr.update(entryUri, values, null, null);
}
}.start();
}
}
@Override
public void changeCursor(Cursor cursor) {
reinit(cursor);
super.changeCursor(cursor);
}
@Override
public Cursor swapCursor(Cursor newCursor) {
reinit(newCursor);
return super.swapCursor(newCursor);
}
@Override
public void notifyDataSetChanged() {
reinit(null);
super.notifyDataSetChanged();
}
@Override
public void notifyDataSetInvalidated() {
reinit(null);
super.notifyDataSetInvalidated();
}
private void reinit(Cursor cursor) {
if (cursor != null && cursor.getCount() > 0) {
mIdPos = cursor.getColumnIndex(EntryColumns._ID);
mTitlePos = cursor.getColumnIndex(EntryColumns.TITLE);
mMainImgPos = cursor.getColumnIndex(EntryColumns.IMAGE_URL);
mDatePos = cursor.getColumnIndex(EntryColumns.DATE);
mIsReadPos = cursor.getColumnIndex(EntryColumns.IS_READ);
mFavoritePos = cursor.getColumnIndex(EntryColumns.IS_FAVORITE);
mFeedNamePos = cursor.getColumnIndex(FeedColumns.NAME);
mFeedIdPos = cursor.getColumnIndex(EntryColumns.FEED_ID);
}
}
private static class ViewHolder {
public TextView titleTextView;
public TextView dateTextView;
public ImageView mainImgView;
public ImageView starImgView;
public boolean isRead, isFavorite;
}
private static class AdsHolder {
NativeExpressAdView adView;
}
}
公共类EntriesCursorAdapter扩展了ResourceCursorAdapter{
私有最终Uri mUri;
私有最终布尔mShowFeedInfo;
私有int mIdPos、mTitlePos、mMainImgPos、mDatePos、误读POS、mFavoritePos、MFEEDDPOS、MFEEDDAMEPOS;
公共静态最终int Ads_视图_类型=11;
公共EntriesCursorAdapter(上下文上下文、Uri、光标、布尔showFeedInfo){
super(上下文,PrefUtils.getInt(PrefUtils.NEWS\u FORMAT\u int,R.layout.item\u entry\u list2),游标,0);
mUri=uri;
mShowFeedInfo=showFeedInfo;
雷尼特(光标);
}
@凌驾
公共视图newView(上下文上下文、光标、视图组父对象){
final int position=cursor.getPosition();
最终int viewtype=getItemViewType(位置);
查看项目视图;
if(视图类型==Ads\U视图\U类型){
最终LayoutFlater充气机=LayoutFlater.from(上下文);
itemView=充气机。充气(R.layout.native_ads,父项,false);
if(itemView.getTag(R.id.holder)==null){
AdsHolder ads_holder=新AdsHolder();
ads_holder.adView=(NativeExpressAdView)itemView.findviewbyd(R.id.adView2);
itemView.setTag(R.id.holder、ads_holder);
}返回项目视图;
}
否则{
最终LayoutFlater充气机=LayoutFlater.from(上下文);
itemView=inflater.inflate(PrefUtils.getInt(PrefUtils.NEWS\u FORMAT\u int,R.layout.item\u entry\u list2),父项,false);
if(itemView.getTag(R.id.holder)==null){
ViewHolder=新的ViewHolder();
holder.titleTextView=(TextView)itemView.findViewById(android.R.id.text1);
holder.dateTextView=(TextView)itemView.findViewById(android.R.id.text2);
holder.mainImgView=(ImageView)itemView.findViewById(R.id.main_图标);
holder.starImgView=(ImageView)itemView.findViewById(R.id.favorite_图标);
itemView.setTag(R.id.holder,holder);
}
返回项目视图;
}
}
@凌驾
public int getItemViewType(int位置){
如果(位置%6==0)
{return Ads\u view\u type;}
否则{
返回super.getItemViewType(位置);
}
}
@凌驾
public void bindView(视图、最终上下文、光标){
final int position=cursor.getPosition();
最终int viewtype=getItemViewType(位置);
if(视图类型==Ads\U视图\U类型){
试一试{
adshholder=(adshholder)view.getTag(R.id.holder);
AdRequest请求=新建AdRequest.Builder()
.addTestDevice(“ca-app-pub-5647351014779121/8591922893”)
.build();
adsHolder.adView.loadAd(请求);
}捕获(例外e){
}
}否则{
试一试{
ViewHolder=(ViewHolder)view.getTag(R.id.holder);
String titleText=cursor.getString(mTitlePos);
holder.titleTextView.setText(titleText);
final long feedId=cursor.getLong(mfeedidos);
String feedName=cursor.getString(mFeedNamePos);
String mainImgUrl=cursor.getString(mMainImgPos);
mainImgUrl=TextUtils.isEmpty(mainImgUrl)?null:NetworkUtils.getdownloadeOrdinStatimageURL(cursor.getLong(mIdPos),mainImgUrl);
ColorGenerator=ColorGenerator.DEFAULT;
int color=generator.getColor(feedId);//该颜色特定于feedId(不应更改)
字符串lettersForName=feedName!=null?(feedName.length()<2?feedName.toUpperCase():feedName.substring(0,2).toUpperCase()):“”;
TextDrawable-letterDrawable=TextDrawable.builder().buildRect(lettersForName,颜色);
如果(mainImgUrl!=null){
Glide.with(context).load(mainImgUrl).centerCrop().placeholder(letteraweable).error(letteraweable).into(holder.mainImgView);
}否则{
滑动。清除(保持架。主视图);
支架.主imgView.可设置图像可绘制(可绘制字母);
}
holder.isFavorite=cursor.getInt(mFavoritePos)==1;
holder.starImgView.setVisibility(holder.isFavorite?View.VISIBLE:View.INVISIBLE);
如果(mShowFeedInfo&&mFeedNamePos>-1){
if(feedName!=null){
holder.dateTextView.setText(Html.fromHtml(“+feedName+”+Constants.逗号+空格+StringUtils.getDateTimeString(cursor.getLong(mDatePos)));
}否则{
holder.dateTextView.setText(StringUtils.getDateTimeString(cursor.getLong(mDatePos));
}
}否则{
holder.dateTextView.setText(StringUtils.getDateTimeString(cursor.getLong(mDatePos));
}
if(cursor.isNull(mIsReadPos)){
holder.titleTextView.setEnabled(true);
holder.dateTextView.setEnabled(true);
holder.isRead=false;
}否则{
holder.titleTextView.setEnabled(false);
holder.dateTextView.setEnabled(false);
holder.isRead=true;
}
}捕获(例外e){}
}
}
public void toggleReadState(最终长id,视图){
final ViewHolder=(ViewHolder)view.getTag(R.id.holder);
如果(霍尔德)