如何通过按导航栏中的第二个标签来显示插页式广告?



在我的应用程序中,我有一个带有三个选项卡的导航栏,每个选项卡都是一个片段,该栏如下所示: https://gyazo.com/5052f885effb3e0154d407b3bd8d3884 它只是一个带有三个选项卡的普通导航栏。

所以现在我想通过按第二个选项卡来显示我的插页式广告(我在我的 MainActivity onCreate 中加载),在本例中名为"Ausraster"的选项卡。

所以我做了以下操作:我在主活动中加载了插页式广告 onCreate,如下所示:

public class MainActivity extends AppCompatActivity{
public InterstitialAd mInterstitialAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AdRequest adRequest = new AdRequest.Builder().build();
mInterstitialAd = new InterstitialAd(MainActivity.this);
mInterstitialAd.setAdUnitId("MY ID");
mInterstitialAd.loadAd(adRequest);
}

然后我在 MainActivity 中编写了显示插页式方法:

public void displayInterstitial() {
mInterstitialAd.setAdListener(new AdListener() {
public void onAdLoaded() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
});
}

最后,我在第二个片段"Ausraster"片段的onCreateView中写了这一行:

((MainActivity)getActivity()).displayInterstitial();

现在应该实际上折叠所有内容,但问题如下:如果我启动应用程序,插页式广告会在延迟 3 秒后显示,而无需按第二个选项卡。但我希望它仅在我单击第二个选项卡时才显示。那我该怎么办?

我现在有一个多月的这个问题,如果有人能告诉我为什么插页式广告在不按第二个选项卡的情况下显示,我将非常高兴。

这是我的所有代码,希望你能向我解释一下,对不起我的英语:)

主要活动:

public class MainActivity extends AppCompatActivity{
FragmentManager mFragmentManager;
FragmentTransaction mFragmentTransaction;
public InterstitialAd mInterstitialAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

/**
*Setup the NavigationView
*/
mNavigationView = (NavigationView) findViewById(R.id.shitstuff) ;
/**
* Lets inflate the very first fragment
* Here , we are inflating the TabFragment as the first Fragment
*/
mFragmentManager = getSupportFragmentManager();
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.replace(R.id.containerView,new TabFragment()).commit();

AdRequest adRequest = new AdRequest.Builder().build();
mInterstitialAd = new InterstitialAd(MainActivity.this);
mInterstitialAd.setAdUnitId("MyId");
mInterstitialAd.loadAd(adRequest);
}

public void displayInterstitial() {
mInterstitialAd.setAdListener(new AdListener() {
public void onAdLoaded() {
if (mInterstitialAd.isLoaded()) {
mInterstitialAd.show();
}
}
});
}
}

选项卡片段:

public class TabFragment extends Fragment {
public static TabLayout tabLayout;
public static ViewPager viewPager;
public static int int_items = 3 ;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

/**
*Inflate tab_layout and setup Views.
*/
View x =  inflater.inflate(R.layout.tab_layout,null);
tabLayout = (TabLayout) x.findViewById(R.id.tabs);
viewPager = (ViewPager) x.findViewById(R.id.viewpager);
/**
*Set an Apater for the View Pager
*/
viewPager.setAdapter(new MyAdapter(getChildFragmentManager()));
/**
* Now , this is a workaround ,
* The setupWithViewPager dose't works without the runnable .
* Maybe a Support Library Bug .
*/
tabLayout.post(new Runnable() {
@Override
public void run() {
tabLayout.setupWithViewPager(viewPager);
}
});
return x;
}
class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fm) {
super(fm);
}
/**
* Return fragment with respect to Position .
*/
@Override
public Fragment getItem(int position)
{
if(position == 0){
return new KommentareFragment();
}
if(position == 1){
return new AusrasterFragment();
}
if(position == 2){
return new LustigesFragment();
}
return null;
}
@Override
public int getCount() {
return int_items;
}
/**
* This method returns the title of the tab according to the position.
*/
@Override
public CharSequence getPageTitle(int position) {
switch (position){
case 0 :
return "Kommentare";
case 1 :
return "Ausraster";
case 2 :
return "Lustiges";
}
return null;
}
}
final public void showInterstitial(){
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
super.onAdLoaded();
if(mInterstitialAd.isLoaded()){
mInterstitialAd.show();
}
}
@Override
public void onAdClosed() {
}
});
}
}

最后我的第二个片段:

public class AusrasterFragment extends Fragment{

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView=inflater.inflate(R.layout.ausraster_layout,container,false);
return rootView;
}

ViewPager会提前加载其他屏幕外片段,以使动画在更改选项卡时看起来很流畅。 因此,广告无需单击第二个选项卡即可加载。但是,您可以使用viewPager.setOffscreenPageLimit更改要加载的屏幕外片段数,但其默认值和最小值为 1。如果将其设置为 1,则会提前创建第二个选项卡,但不会创建第三个选项卡。

要在选择第二个标签时加载广告,您必须使用ViewPager 的 pageChangeListener并检查是否选择了第二个标签,显示广告。

viewPager.setOnPageChangeListener(new OnPageChangeListener() {
public void onPageScrollStateChanged(int state) {}
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}
public void onPageSelected(int position) {
if(position == 1)
displayInterstitial();
}
});

并且不要忘记从片段中删除((MainActivity)getActivity()).displayInterstitial();

最新更新