2012-12-05 1 views
0

J'ai une application. Il y a des classes. Par exemple, j'ai ces classes:Gestion d'adView à partir d'une autre classe

-MainActivity.java

-AppName.java

-GameScreen.java

-GamePlayScreen.java

J'ai codé en font la publicité MainActivity. java comme suit,

public class MainActivity extends AndroidApplication 
{ 
    protected AdView adView; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    RelativeLayout layout = new RelativeLayout(this); 

    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,  WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); 

    AndroidApplicationConfiguration cfg = new AndroidApplicationConfiguration(); 
    cfg.useGL20 = false; 
    View gameView = initializeForView(new AppName(), cfg); 

    AdView adView = new AdView(this, AdSize.BANNER, "xxxxxxxxxxxxxxxx"); 

    AdRequest request = new AdRequest(); 
    request.addTestDevice("xxxxxxxxxxxxxxxx"); 
    adView.loadAd(request); 

    layout.addView(gameView); 

    RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); 
    adParams.addRule(RelativeLayout.ALIGN_PARENT_TOP); 
    adParams.addRule(RelativeLayout.CENTER_HORIZONTAL); 

    layout.addView(adView, adParams); 

    setContentView(layout); 
    } 
} 

J'ai un banne r centre supérieur. C'est bon. Voici AppName.java:

public class AppName extends Game 
{ 
@Override 
public void create() 
{ 
    Assets.load(); 
    setScreen(new GameScreen(this, Settings.STATE_START)); 
} 

@Override 
public void resize(int width, int height) 
{ 
    super.resize(width, height); 
} 

@Override 
public void pause() 
{ 

} 

@Override 
public void resume() 
{ 

} 

@Override 
public void dispose() 
{ 
    Assets.dispose(); 
    getScreen().dispose(); 
} 
} 

Tout va bien j'ai encore une bannière. Mais le problème commence ici. Dans mon GameScreen, il y a un lien qui va à GamePlayScreen comme:

Il va à GamePlayScreen il n'y a pas de problème.

game.setScreen(new GamePlayScreen(game, i + 1)); 

Maintenant, je suis dans le jeu. Mais je ne veux pas voir la bannière ici. La question est, comment puis-je désactiver mon adView dans GamePlayScreen? J'ai expérimenté cela si vous essayez de modifier MainActivity.java d'une autre classe, vous voyez de très bonnes exceptions.

Merci pour vos réponses et commentaires. Et je pense que c'est un bon exemple pour les personnes qui veulent intégrer la publicité dans leurs applications.

Répondre

0

Déclarez votre annonce public static, et vous devriez être en mesure d'y accéder via activityName.AdView.setVisibility (View.GONE);

assurez-vous instanciez bien dans votre activité-

+0

je l'ai fait public adView statique dans MainActivity.java comme vous l'avez dit, et ca lité MainActivity.adView.setVisibility (View.GONE); dans GamePlayScreen.java. Il dit NullPointerException. Je l'attendais, j'ai essayé d'instancier le MainActivity dans le GamePlayScreen. Je pense que je ne pouvais pas le faire correctement. Il dit "E/AndroidRuntime (26070): java.lang.RuntimeException: Impossible de créer un gestionnaire à l'intérieur du thread qui n'a pas appelé Looper.prepare()" –

+0

instancier l'adview dans la classe où l'objet se trouve- – sykal

0

vous pouvez penser à utiliser boniment stratégique pour changer de comportement au moment de l'exécution, par exemple

public class Game { 
    ShowAdBehavior showAdBehavior; 

    void setShowAdBehavior(ShowAdBehavior qb) 
    { 
     showAdBehavior = qb; 
    } 

    void performAd(){ 
     showAdBehavior.AdArea(); 
    } 

    public void display() { 

    } 
} 



public class AppName extends Game { 
    public AppName() 
    { 
     //set you default behaviour 
     showAdBehavior = new CanShowAd();  
    } 

} 


public interface ShowAdBehavior { 
    public void AdArea(); 
} 


public class CantShowAd implements ShowAdBehavior{ 
    @Override 
    public void AdArea() { 
     // you can pass adView as a paramater here and setvisibility VISIBLE 
     System.out.println("dont show ad");   
    } 
} 


public class CanShowAd implements ShowAdBehavior{ 

    @Override 
    public void AdArea() { 
     // you can pass adView as a paramater here and setvisibility GONE 
     System.out.println("show ad");  
    } 
} 


public class MainClass { 

    public static void main(String[] args) { 

      // In your activity you can set the behavior 


     AppName appName = new AppName(); 
     appName.performAd();   
     appName.setShowAdBehavior(new CantShowAd());   
     appName.performAd();   
    } 
} 

SORTIE

show ad ne montre pas l'annonce

+0

Eh bien, à Enfin, je suis d'accord que vous ne pouvez pas modifier votre activité d'une autre classe après avoir commencé une activité. Vous pouvez uniquement utiliser ses variables et écrire votre code de publicité dans une autre classe. –

+0

oui, c'est vrai. Parce qu'après une activité tuée, vous ne pouvez pas atteindre son widget. – Talha

Questions connexes