如何将插页式广告放在适配器类中?

How to put an Interstital Ad inside an adapter class?(如何将插页式广告放在适配器类中?)
本文介绍了如何将插页式广告放在适配器类中?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在 MainActivity 中有一个 ViewPager,当您触摸适配器内的每个图像时,它会打开一个新的 Activity.

I have a ViewPager in MainActivity that open a new Activity when you touch each image that is inside an adapter.

有人知道如何在加载这些新活动之前展示广告吗?

Does anyone know how to show an ad before these new activities are loaded?

如您所见,我有一个名为 CustomSwipeAdapterCovers 的适配器,它负责打开新活动,并在 MainActivity 中显示广告是如何加载的,但我不知道如何在非活动上投放广告.

As you can see, I have an adapter called CustomSwipeAdapterCovers and it is responsible for opening the new activities, and in MainActivity show how the ad is loaded, but I don't know how to implement ads on non-activities.

public class MainActivity extends AppCompatActivity {


    private static final int START_LEVEL = 1;
    private int mLevel;
    private Button mNextLevelButton;
    private InterstitialAd mInterstitialAd;
    private TextView mLevelTextView;


    private ViewPager viewPager;
    private CustomSwipeAdapterCapas adapter;



    //=================================

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Create the next level button, which tries to show an interstitial when clicked.
        mNextLevelButton = ((Button) findViewById(R.id.next_level_button));
        mNextLevelButton.setEnabled(false);
        mNextLevelButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                showInterstitial();
            }
        });



        // Create the text view to show the level number.
        mLevelTextView = (TextView) findViewById(R.id.level);
        mLevel = START_LEVEL;

        // Create the InterstitialAd and set the adUnitId (defined in values/strings.xml).
        mInterstitialAd = newInterstitialAd();
        loadInterstitial();

        // Toasts the test ad message on the screen. Remove this after defining your own ad unit ID.
        Toast.makeText(this, TOAST_TEXT, Toast.LENGTH_LONG).show();



        viewPager = findViewById(R.id.viewpager_main_xml);
        adapter = new CustomSwipeAdapterCapas(this);
        viewPager.setAdapter(adapter);

    }




   //=====================================

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }


    @Override
    protected void onStop() {
        super.onStop();

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

    }

    @Override
    protected void onRestart() {
        super.onRestart();

    }

    private InterstitialAd newInterstitialAd() {
        InterstitialAd interstitialAd = new InterstitialAd(this);
        interstitialAd.setAdUnitId(getString(R.string.interstitial_ad_unit_id));
        interstitialAd.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
                mNextLevelButton.setEnabled(true);
            }

            @Override
            public void onAdFailedToLoad(int errorCode) {
                mNextLevelButton.setEnabled(true);
            }

            @Override
            public void onAdClosed() {
                // Proceed to the next level.
                goToNextLevel();
            }
        });
        return interstitialAd;
    }

    private void showInterstitial() {
        // Show the ad if it's ready. Otherwise toast and reload the ad.
        if (mInterstitialAd != null && mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
        } else {
            Toast.makeText(this, "Ad did not load", Toast.LENGTH_SHORT).show();
            goToNextLevel();
        }
    }

    private void loadInterstitial() {
        // Disable the next level button and load the ad.
        mNextLevelButton.setEnabled(false);
        AdRequest adRequest = new AdRequest.Builder()
                .setRequestAgent("android_studio:ad_template").build();
        mInterstitialAd.loadAd(adRequest);
    }

    private void goToNextLevel() {
        // Show the next level and reload the ad to prepare for the level after.
        mLevelTextView.setText("Level " + (++mLevel));
        mInterstitialAd = newInterstitialAd();
        loadInterstitial();
    }

}

<小时>

public class CustomSwipeAdapterCovers extends PagerAdapter {



    private int[] BookCovers = {   R.drawable.cover_1,
                                    R.drawable.cover_2,
                                    R.drawable.cover_3,
                                    R.drawable.capa_4,
                                    R.drawable.capa_5,
                                    R.drawable.capa_6,
                                    R.drawable.capa_7,
                                    R.drawable.capa_8,
                                    R.drawable.capa_9,
                                    R.drawable.capa_10,
                                    R.drawable.capa_11,
                                    R.drawable.capa_12,};

    private Context context;
    private LayoutInflater layoutInflater;

    public CustomSwipeAdapterCapas(Context context){

        this.context = context;

    }


    @Override
    public int getCount() {
        return capasLivros.length;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return (view == (LinearLayout) object);
    }

    @Override
    public Object instantiateItem(final ViewGroup container, final int position) {

        layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View item_view = layoutInflater.inflate(R.layout.capas_layout, container, false);
        ImageButton imageButton = item_view.findViewById(R.id.imagebutton_main_xml);
        imageButton.setImageResource(BookCovers[position]);


        imageButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if( position == 0){


                    Intent intent = new Intent(v.getContext(), LivroUmActivity.class);
                    v.getContext().startActivity(intent);

                } else if(position == 1){


                    Intent intent = new Intent(v.getContext(), LivroDoisActivity.class);
                    v.getContext().startActivity(intent);

                } else if(position == 2){

                    Intent intent = new Intent(v.getContext(), LivroTresActivity.class);
                    v.getContext().startActivity(intent);

                } else if(position == 3){

                    Intent intent = new Intent(v.getContext(), LivroQuatroActivity.class);
                    v.getContext().startActivity(intent);

                } else if(position == 4){

                    Intent intent = new Intent(v.getContext(), LivroCincoActivity.class);
                    v.getContext().startActivity(intent);

                } else if(position == 5){

                    Intent intent = new Intent(v.getContext(), LivroSeisActivity.class);
                    v.getContext().startActivity(intent);

                } else if(position == 6){

                    Intent intent = new Intent(v.getContext(), LivroSeteActivity.class);
                    v.getContext().startActivity(intent);

                } else if(position == 7){

                    Intent intent = new Intent(v.getContext(), LivroOitoActivity.class);
                    v.getContext().startActivity(intent);

                } else if(position == 8){

                    Intent intent = new Intent(v.getContext(), LivroNoveActivity.class);
                    v.getContext().startActivity(intent);

                } else if(position == 9){

                    Intent intent = new Intent(v.getContext(), LivroDezActivity.class);
                    v.getContext().startActivity(intent);

                } else if(position == 10){

                    Intent intent = new Intent(v.getContext(), LivroOnzeActivity.class);
                    v.getContext().startActivity(intent);

                } else if(position == 11){

                    Intent intent = new Intent(v.getContext(), LivroDozeActivity.class);
                    v.getContext().startActivity(intent);

                }

            }
        });


        container.addView(item_view);
        return item_view;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((LinearLayout) object);
        //super.destroyItem(container, position, object);
    }

推荐答案

我也遇到过同样的问题.在您的情况下,不是从适配器活动打开插页式广告,而是从适配器活动的下一个活动打开它.以下是我的解决方案:将 Activity_B 视为您的适配器活动.

I have also faced this very same issue. In your case instead of opening interstitial ads from adapter activity, open it from next activity of adapter activity. Below is my Solution: Consider Activity_B as your Adapter activity.

  • 假设有3个活动,开启顺序如下:

  • Suppose there are 3 activities and opening sequence is as follows:

Activity_A --> Activity_B --> Activity_C.

  • 现在我想在 Activity_BActivity_C 之间显示插页式广告.

  • Now I want to show interstitial Ad between Activity_B and Activity_C.

    我先在Activity_A中加载了Interstitial Ad,然后在Activity_C中调用(或显示).

    I have first loaded the Interstitial Ad in Activity_A and then call(or show) in Activity_C.

    你可以像上面那样做:

    在 Activity_A 即 MainActivity 中添加如下代码:

    In Activity_A i.e. MainActivity add code like this:

    public void showme(){
    
            mInterstitialAd = new InterstitialAd(this);
            mInterstitialAd.setAdUnitId(getString(R.string.interstitial_full_screen));
            AdRequest adRequest = new AdRequest.Builder()
                    .build();
            mInterstitialAd.loadAd(adRequest);
    
            mInterstitialAd.setAdListener(new AdListener()
            {
    
                @Override
                public void onAdClosed()
                {
                    //reload interstitial
                    AdRequest adRequest = new AdRequest.Builder()
    //                        .addTestDevice("YOUR_DEVICE_ID")
                            .build();
                    mInterstitialAd.loadAd(adRequest);
                }
            });
        }
    
        public static void showInterstitial() {
            if (mInterstitialAd.isLoaded()) {
                mInterstitialAd.show();
            }
        }
    

    在 OnCreate 内的 Activity_A 中调用这个 showme().

    Call this showme() in Activity_A inside OnCreate.

    在 Activity_C 中将下面的代码粘贴到 OnCreate 中:

    In Activity_C paste below code inside OnCreate:

    Activity_A.showInterstitial();
    

    此外,此方法不违反任何关于插页式广告和横幅广告的 Google Admob 政策.

    Also, this method doesn't violate any Google Admob policy of interstitial ads as well as banner ads.

    这篇关于如何将插页式广告放在适配器类中?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

  • 本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

    相关文档推荐

    How to target newer versions in .gitlab-ci.yml using auto devops (java 11 instead of 8 and Android 31 instead of 29)(如何在.gitlab-ci.yml中使用自动开发工具(Java 11而不是8,Android 31而不是29)瞄准较新的版本)
    Android + coreLibraryDesugaring: which Java 11 APIs can I expect to work?(Android+core LibraryDesugering:我可以期待哪些Java 11API能够工作?)
    How to render something in an if statement React Native(如何在If语句中呈现某些内容Reaction Native)
    How can I sync two flatList scroll position in react native(如何在本机Reaction中同步两个平面列表滚动位置)
    Using Firebase Firestore in offline only mode(在仅脱机模式下使用Firebase FiRestore)
    Crash on Google Play Pre-Launch Report: java.lang.NoSuchMethodError(Google Play发布前崩溃报告:java.lang.NoSuchMethodError)