关于此问题,有一个post。但这并没有那么详细。

我正在使用带有Viewholder的网格适配器(从ArrayAdapter扩展)。我用MoPubAdAdapter包装了它。广告显示在gridview中,但是当我单击一个项目时,它给我一个错误的信息(实际上是后来的一个或两个项目)。
我认为发生这种情况是因为有观察者。在分拆时不在屏幕上的广告项目和项目的位置是固定的,但是一旦广告出现在屏幕上,位置就会再次中断。

我该如何解决?我必须进行自定义集成吗?如果是这样,我该怎么办?是否有任何相关文档?

我将此代码用于MoPub集成:

// Set up a ViewBinder and MoPubNativeAdRenderer as above.
ViewBinder viewBinder = new ViewBinder.Builder(R.layout.native_ad_layout)
        .mainImageId(R.id.native_ad_main_image)
        .iconImageId(R.id.native_ad_icon_image)
        .titleId(R.id.native_ad_title)
        .build();

// Set up the positioning behavior your ads should have.
MoPubNativeAdPositioning.MoPubServerPositioning adPositioning =
        MoPubNativeAdPositioning.serverPositioning();
MoPubNativeAdRenderer adRenderer = new MoPubNativeAdRenderer(viewBinder);

// Set up the MoPubAdAdapter
mAdAdapter = new MoPubAdAdapter(mContext, adapter, adPositioning);
mAdAdapter.registerAdRenderer(adRenderer);
loadAds();

最佳答案

您可以像这样在初始适配器中获取元素的原始位置:

position = mAdAdapter.getOriginalPosition(position);


请查看以下文章:https://github.com/mopub/mopub-android-sdk/wiki/Native-Ads-with-Recycler-View

如它所说


  如果您在原始适配器上注册了任何数据观察者,则您
  应该在MoPubRecyclerAdapter上注册它们,以便它们
  接收内容项已调整位置的消息。如果你
  不这样做,您收到的用于插入和移除的职位
  消息可能不正确。确保检查isAd(position)并使用
  MoPubRecyclerAdapter#getOriginalPosition(如果需要该位置)
  本地适配器中的项目。

10-07 12:52
查看更多