在适配器中膨胀视图

inflate view in adapter

在我的代码中我有这个条件。如果 inmobi 广告请求成功显示 inmoby 广告如果失败显示 Google 广告。

这是我的代码

@Override
  public View getView(int positionInList, View convertView, final ViewGroup parent) {
    if (adsFreq != 0 && positionInList > 0 && (positionInList + 1) % adsFreq == 0) {
      mConvertView = convertView;
      if (mConvertView == null) {
        mConvertView = vi.inflate(R.layout.banner_inmobi_container,parent,false);
      }
      IMBanner bannerAdView = (IMBanner)mConvertView.findViewById(R.id.bannerView);
      AdUtils.getInstance().loadInMobiBanner(bannerAdView, new IAdListener() {
        @Override
        public void onFail() {
          mConvertView = vi.inflate(R.layout.banner_container, parent, false);
          AdView mAdView = (AdView) mConvertView.findViewById(R.id.adView);
          mAdView.loadAd(AdUtils.getAdmobRequestForCurrentUser());
        }
      });
      return mConvertView;
    }
}

当 InMobi 请求成功时 inmob 广告显示,但当我收到请求失败时 Google广告现在完全显示。

为了测试,我单独放置了这段代码,它也能正常工作。

mConvertView = vi.inflate(R.layout.banner_container, parent, false);
          AdView mAdView = (AdView) mConvertView.findViewById(R.id.adView);
          mAdView.loadAd(AdUtils.getAdmobRequestForCurrentUser());

加载失败时我做错了什么 google 广告没有显示?

您可以尝试这样做:

  private AdRequest adRequest;

  adRequest = new AdRequest.Builder().build();

  IMBanner bannerAdView = (IMBanner)mConvertView.findViewById(R.id.bannerView);
  AdView mAdView = (AdView) mConvertView.findViewById(R.id.adView);
  adRequest = new AdRequest.Builder().build();
  AdUtils.getInstance().loadInMobiBanner(bannerAdView, new IAdListener() {
    @Override
    public void onFail() {
        mAdView.loadAd(adRequest);
    }
  });

在 getView 中 运行 它不是一个好习惯。每次滚动时,getView() 方法都会 运行 相当频繁。相反,运行 它在 getView() 之外,并将结果附加到布尔变量中。

稍后在 getView() 中,您可以使用该布尔变量来确定要膨胀显示哪个视图,或者不显示任何视图。