从 recyclerview 打开插页式广告时无法显示进度对话框
Unable to show progress dialog SPECIFICALLY when opening interstitial ad from recyclerview
我想在两个活动之间添加插页式广告。我的第一个 activity 是 recyclerView。当我点击它时,我打开另一个 activity。
我有两个可行的解决方案,但都没有提供我想要的性能。这两种情况的问题是广告需要时间来加载。
- 第一个解决方案 - 我打开第二个activity然后加载插页式广告。 问题 这里是用户打开 activity,在广告中断之前有几秒钟的时间点击。理想情况下 activity 不会在广告显示之前加载。这打破了流程。
- 第二种解决方案(这是我的首选解决方案)- 我点击 recyclerview,它会打开插页式广告。当我点击关闭广告时,它会打开新的 activity。 问题这里是当用户点击recyclerview项目时,打开插页式广告需要时间,这可能会让用户感到困惑,并且用户可能开始多次点击。
基于我的第二个解决方案,我的理想解决方案是:用户点击 recyclerview 项目,出现加载程序,显示插页式添加。我在我的onClick中添加了一个加载器,当我直接打开项目时它会出现,但是当我打开插页时它不会出现。
这是基于我的第二个解决方案的当前代码:
//region Item touch listener
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity().getApplicationContext(), listView, new itemsFragment.ClickListener() {
@Override
public void onClick(View view, int position) {
Item item = itemList.get(position);
String itemId = item.getId();
//STARTING LOADER HERE
ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setCancelable(false);
progress.show();
//OPEN FOR CONDITION
if ((counter % 2) == 0) {
//LOADER NOT VISIBLE
loadInterstitialAd(itemId);
} else {
//LOADER VISIBLE
fetchItem(itemId);
}
//CLOSING LOADER HERE
progress.dismiss();
}
}));
//endregion
...
//region Interstitial ad
private void loadInterstitialAd(String itemId) {
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(SAMPLE_INTERSTITIAL_ID);
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
Log.e(TAG, "Loaded interstitial ad");
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
@Override
public void onAdFailedToLoad(int i) {
super.onAdFailedToLoad(i);
Log.e(TAG, "Failed to load interstitial ad");
}
@Override
public void onAdClosed() {
super.onAdClosed();
fetchItem(itemId);
}
});
AdRequest adRequest = new AdRequest.Builder().build();
mInterstitialAd.loadAd(adRequest);
}
//endregion
根据 Selvin 的评论,我通过将显示进度移动到加载插页式广告,并在广告打开前隐藏它,使它起作用。
我想在两个活动之间添加插页式广告。我的第一个 activity 是 recyclerView。当我点击它时,我打开另一个 activity。
我有两个可行的解决方案,但都没有提供我想要的性能。这两种情况的问题是广告需要时间来加载。
- 第一个解决方案 - 我打开第二个activity然后加载插页式广告。 问题 这里是用户打开 activity,在广告中断之前有几秒钟的时间点击。理想情况下 activity 不会在广告显示之前加载。这打破了流程。
- 第二种解决方案(这是我的首选解决方案)- 我点击 recyclerview,它会打开插页式广告。当我点击关闭广告时,它会打开新的 activity。 问题这里是当用户点击recyclerview项目时,打开插页式广告需要时间,这可能会让用户感到困惑,并且用户可能开始多次点击。
基于我的第二个解决方案,我的理想解决方案是:用户点击 recyclerview 项目,出现加载程序,显示插页式添加。我在我的onClick中添加了一个加载器,当我直接打开项目时它会出现,但是当我打开插页时它不会出现。
这是基于我的第二个解决方案的当前代码:
//region Item touch listener
recyclerView.addOnItemTouchListener(new RecyclerTouchListener(getActivity().getApplicationContext(), listView, new itemsFragment.ClickListener() {
@Override
public void onClick(View view, int position) {
Item item = itemList.get(position);
String itemId = item.getId();
//STARTING LOADER HERE
ProgressDialog progress = new ProgressDialog(this);
progress.setTitle("Loading");
progress.setCancelable(false);
progress.show();
//OPEN FOR CONDITION
if ((counter % 2) == 0) {
//LOADER NOT VISIBLE
loadInterstitialAd(itemId);
} else {
//LOADER VISIBLE
fetchItem(itemId);
}
//CLOSING LOADER HERE
progress.dismiss();
}
}));
//endregion
...
//region Interstitial ad
private void loadInterstitialAd(String itemId) {
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(SAMPLE_INTERSTITIAL_ID);
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
Log.e(TAG, "Loaded interstitial ad");
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
@Override
public void onAdFailedToLoad(int i) {
super.onAdFailedToLoad(i);
Log.e(TAG, "Failed to load interstitial ad");
}
@Override
public void onAdClosed() {
super.onAdClosed();
fetchItem(itemId);
}
});
AdRequest adRequest = new AdRequest.Builder().build();
mInterstitialAd.loadAd(adRequest);
}
//endregion
根据 Selvin 的评论,我通过将显示进度移动到加载插页式广告,并在广告打开前隐藏它,使它起作用。