2017-12-28 17 views
0

MainActivityViewPagerがあり、アダプターの内側にある各画像をタッチすると、新しいActivityが表示されます。Interstital広告をアダプタクラスに入れる方法は?

これらの新しいアクティビティが読み込まれる前に広告を表示する方法を知っている人はいますか?

ご覧のとおり、CustomSwipeAdapterCoversというアダプタがあり、それは新しいアクティビティを開く責任があり、MainActivityでは広告の読み込み方法を示していますが、非アクティビティで広告を実装する方法はわかりません。

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

答えて

1

また、私はこの非常に同じ問題に直面しています。 アダプタアクティビティからインタースティシャル広告を開く代わりに、アダプタアクティビティの次のアクティビティからインタースティシャル広告を開きます。 私の解決策は次のとおりです。 Activity_Bをあなたのアダプタのアクティビティとみなしてください。

  • 3つの活動やオープニングシーケンスがあると仮定し、以下のようにされています。今、私はActivity_BActivity_C間のインタースティシャル広告を表示したい

    Activity_A --> Activity_B --> Activity_C. 
    
  • 私はInterstitial AdをActivity_Aに読み込んだ後、Activity_Cに電話(または表示)しています。あなたは、このように上記行うことができます

:OnCreateの内部Activity_Aで

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

コールこのSHOWME():

Activity_AすなわちMainActivityでは、このようなコードを追加します。 OnCreate関数内のコード以下Activity_Cペーストで

Activity_A.showInterstitial(); 

また、この方法は、間質広告だけでなく、バ​​ナー広告のすべてのGoogleのAdMobポリシーに違反していません。

このソリューションを実装しているPF Balance & Claim Statusを確認してください。

このアプリでは、メインアクティビティはアダプタアクティビティです。

+0

回答ありがとうございますが、私にとってはうまくいかず、このエラーが発生します。原因:java.lang.NullPointerException:仮想メソッド 'boolean com.google.android.gms.ads.InterstitialAd.isLoaded () 'をnullオブジェクト参照 – djalmafreestyler

+0

MainActivity:https://paste2.org/zwpfLpwvに追加し、showInterstitial();を呼び出しました。アクティビティの内部:https://paste2.org/VhOX7eAY – djalmafreestyler

関連する問題