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

How can I display Interstitial ad by pressing on the second tab in my navigationbar?

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

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

的选项卡

所以我执行了以下操作:我在 MainActivity 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 中写了 displayInterstitial 方法:

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();
                }
            }
        });
    }
}

TabFragment:

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();