我有三个活动,所有这三个活动的底部都有横幅广告,这些广告由三个活动的OnCreate()
方法中的代码设置。
由于某种原因,我需要在从一个活动转移到另一个活动时完成每个活动,并startActivity()
回到第一个活动。
我想知道,如何为所有这三个活动制作一个横幅广告,而不是从不同的onCreate
单独调用它们,因为我怀疑在活动过渡时我正在刷新广告(安静的)这对您的点击不是一个好习惯。
我是否应该在静态类中声明它,以便可以从任何活动中调用它,只有一个实例可以存在(因此不会因创建活动而刷新)
欢迎提出建议。
答案 0 :(得分:2)
您知道如何实施ViewStub吗?
对于您的问题,ViewStub用于将AdMob广告置于页脚,您只需为此页脚创建布局,然后使用ViewStub示例将此布局包含在XML布局(活动布局)中
这是一个用于实现ViewStub的example,是标题栏的,但你可以从中获取概念。
现在,要优化解决方案(代码),您可以创建抽象类和扩展活动类,并在此类中包含您的AdMob广告代码。
例如:
public abstract class BaseActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public void setFooterAds()
{
// Make ViewStub visible
// include your Ads code
}
}
现在,您只需要在Activity类中扩展此BaseActivity类,并调用setFooterAds()方法来显示AdMob广告。
答案 1 :(得分:1)
您可以将这样的代码放在主要活动中,这样广告横幅就会显示在所有三项活动中。
import com.google.ads.*;
public class testActivity extends Activity {
private static final String MY_AD_UNIT_ID = "yourId";
private AdView adView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.loadUrl("file:///android_asset/www/index.html");
// Create the adView
adView = new AdView(this, AdSize.BANNER, MY_AD_UNIT_ID);
LinearLayout layout = super.root; // this is the only change
layout.addView(adView);
adView.loadAd(new AdRequest());
Xml文件:
<com.admob.android.ads.AdView
android:id="@+id/ad"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
xmlns:backgroundColor="#000000"
xmlns:primaryTextColor="#ffffff"
xmlns:secondaryTextColor="#cccccc"
答案 2 :(得分:1)
我认为这里唯一的出路是使用单个活动和多个片段..活动将有一个框架布局和一个包含Ad ...的片段。根据用户体验,广告,将替换不同的屏幕(片段) -containing-fragment将保持原样,对所有屏幕都是通用的!
答案 3 :(得分:1)
有一种简单的方法!
冒烟了,发现“ ViewStub”之类的东西很有趣,这很有趣,感谢@Paresh数据提示,但为此目的目前太复杂了。使用横幅广告进行所有活动的方法比较简单,它使用的是SINGLETON,它存储所有应用程序的“ AdView”和“ AdRequest”信息。使用各自的ID初始化AdMob和Banners模块后,您可以在程序中的任何位置使用它,只需将AdView添加到每个活动的布局中,而不必忘记在完成每个活动后将其从布局中删除。
公共类SingletonAdMobBanner
private static SingletonAdMobBanner instance;
private AdView adView;
private AdRequest adRequest;
public synchronized static SingletonAdMobBanner getInstance() {
if (instance == null) instance = new SingletonAdMobBanner();
return instance;
}
AdView getAdView() {return adView;}
AdRequest getAdRequest() {return adRequest;}
void setAdView(AdView adView) {this.adView = adView;}
void setAdRequest(AdRequest adRequest) {this.adRequest = adRequest;}
将以下内容添加到MainActivity:
// Initialize AdMob
try {
MobileAds.getVersionString();
} catch (Exception ignored) {
MobileAds.initialize(getApplicationContext(), new OnInitializationCompleteListener() {
@Override
public void onInitializationComplete(InitializationStatus initializationStatus) {
}
});
}
// Init Banner module
SingletonAdMobBanner sam = SingletonAdMobBanner.getInstance();
sam.setAdView(new AdView(getApplicationContext()));
AdView adView = sam.getAdView();
adView.setAdUnitId("your module id");
adView.setAdSize(AdSize.SMART_BANNER);
sam.setAdRequest(new AdRequest.Builder().build());
创建一个公共类或方法,以将横幅广告加载到您设计的特定布局中,以在每个活动中显示横幅广告。这是一个示例:
public static void adLoadBanner (Activity activity) {
SingletonAdMobBanner sam = SingletonAdMobBanner.getInstance ();
if (sam.getAdView ()! = null && sam.getAdRequest ()! = null) {
LinearLayout container = activity.findViewById (R.id.ad_view_container);
container.addView (sam.getAdView ());
sam.getAdView (). loadAd (sam.getAdRequest ());
}
}
在激活onDestroy中的活动之前,不要忘记从布局中删除横幅:
// Remove Ad from this activity
LinearLayout container = findViewById(R.id.ad_view_container);
container.removeAllViews();