2017-04-06 4 views
0

In meiner App habe ich eine Navigationsleiste mit drei Registerkarten, jede Registerkarte ist ein Fragment und die Leiste sieht so aus: https://gyazo.com/5052f885effb3e0154d407b3bd8d3884 Es ist einfach eine normale Navigationsleiste mit drei Registerkarten.Wie kann ich die Interstitial-Anzeige anzeigen, indem ich auf die zweite Registerkarte in meiner Navigationsleiste klicke?

So jetzt möchte ich meine Interstitial-Anzeige (die ich laden in meiner MainActivity onCreate) durch Drücken der zweiten Registerkarte in diesem Fall die Registerkarte mit dem Namen "Ausraster" anzeigen.

Also habe ich folgendes:

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

    } 

und dann schrieb ich die displayInterstitial Methode in meinem MainActivity:

public void displayInterstitial() { 

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

Endlich bin ich die interstitielle Anzeige in der MainActivity onCreate wie folgt geladen schrieb diese Zeile in der onCreateView meines zweiten Fragments das "Ausraster" -Fragment:

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

Sollte nun eigentlich alles klappen aber das Problem ist folgendes: Wenn ich die Anwendung starte, wird die Interstitial Anzeige nach einer Verzögerung von 3 Sekunden angezeigt, ohne auf die zweite Registerkarte zu drücken. Aber ich möchte, dass es nur angezeigt wird, wenn ich auf die zweite Registerkarte klicke. Was kann ich also tun?

Ich habe dieses Problem jetzt über einen Monat und ich wäre so froh, wenn jemand mir sagen kann, warum die Interstitial-Anzeige ohne Drücken der zweiten Registerkarte angezeigt wird.

Hier sind alle meine Codes, ich hoffe, Sie es mir erklären kann, und sorry für mein schlechtes Englisch :)

MainActivity:

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

} 

Und last my secondFragment:

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

Antwort

0

Die ViewPager lädt andere Offscreen-Fragmente im Voraus, damit die Animation beim Ändern der Registerkarte glatt aussieht. Aus diesem Grund wurden die Anzeigen geladen, ohne auf die zweite Registerkarte zu klicken. Sie können jedoch die Anzahl der zu ladenden Offscreen-Fragmente ändern, indem Sie viewPager.setOffscreenPageLimit verwenden. Der Standardwert und der Minimalwert sind jedoch 1. Wenn Sie ihn auf 1 setzen, wird die zweite Registerkarte im Voraus erstellt, nicht die dritte.

Um Anzeigen auf Auswahl der zweiten Registerkarte zu laden, müssen Sie ViewPager pageChangeListener verwenden und prüfen, ob zweite Registerkarte ausgewählt wurde, zeigen Sie die Anzeigen.

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

Und vergessen Sie nicht ((MainActivity)getActivity()).displayInterstitial(); vom Splitter zu entfernen.

+0

Du hast mein Leben gerettet ^^ Danke Kumpel. –

+0

Froh, Ihnen zu helfen :) –

Verwandte Themen