2012-12-05 18 views
0

我有一個應用程序。有課程。例如,我有這些類:從另一個類管理adView

-MainActivity.java

-AppName.java

-GameScreen.java

-GamePlayScreen.java

我在MainActivity做廣告編碼。 java如下,

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

我有一個banne r頂部中心。這很好。 這裏是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(); 
} 
} 

一切都很好,我仍然有一面旗幟。但問題從這裏開始。在我的GameScreen中,有一個鏈接轉到GamePlayScreen,如下所示:

去GamePlayScreen沒有問題。

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

現在我在玩遊戲。但我不想在這裏看到橫幅。

問題是,如何禁用我的AdView在GamePlayScreen中?我經歷過,如果你嘗試從另一個類中修改MainActivity.java,你會看到很好的例外。

感謝您的回答和評論。 我認爲這是一個很好的例子,希望將廣告整合到他們的應用中。

回答

0

聲明您的adView爲public static,您應該可以通過 訪問它activityName.AdVisibility(View.GONE);

確保你在你的活動 - 雖然它實例

+0

我在MainActivity.java中公開了靜態adView,正如您所說的,ca lled MainActivity.adView.setVisibility(View.GONE);在GamePlayScreen.java中。它說NullPointerException。我正在等待它,我試圖在GamePlayScreen中實例化MainActivity。我認爲我做不對。它說:「E/AndroidRuntime(26070):java.lang.RuntimeException:無法在未調用Looper.prepare()的線程中創建處理程序」 –

+0

在對象所在的類中實例化adview- – sykal

0

你能想到用行話戰略改變在運行時的行爲,例如

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

輸出

顯示廣告 不顯示廣告

+0

那麼,在最後我同意,在開始活動後,你不能從另一個班級修改你的活動。你只能使用它的變量並在另一個類中寫你的廣告代碼。 –

+0

是的,這是真的。因爲在活動被殺後,你無法到達它的小部件。 – Talha