- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在使用 AdMob 的应用程序中展示广告时遇到了一些问题。问题如题中所述。
这是我的开始 Activity 课:
package com.example.admobinterstitial;
import android.os.Bundle;
import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.InterstitialAd;
import android.support.v4.app.FragmentActivity;
import android.view.Window;
import android.view.WindowManager;
public class MainActivity extends FragmentActivity
{
public static InterstitialAd mInterstitialAd;
@Override
protected void onCreate(Bundle savedInstanceState) {
// Super
super.onCreate(savedInstanceState);
// Turn off the window's title bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
// Fullscreen mode
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(getResources().getString(R.string.loading_add_id));
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
requestNewInterstitial();
}
});
requestNewInterstitial();
if (findViewById(R.id.fragment_container) != null)
{
if (savedInstanceState != null) {
return;
}
// Create a new Fragment to be placed in the activity layout
Fragments.MenuFragment firstFragment = new Fragments.MenuFragment();
// In case this activity was started with special instructions from an
// Intent, pass the Intent's extras to the fragment as arguments
firstFragment.setArguments(getIntent().getExtras());
// Add the fragment to the 'fragment_container' FrameLayout
getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, firstFragment, firstFragment.getClass().toString()).commit();
}
}
private void requestNewInterstitial() {
AdRequest adRequest = new AdRequest.Builder()
.addTestDevice("my test device ID blabla")
.build();
mInterstitialAd.loadAd(adRequest);
}
}
主要 Activity 布局:
RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<FrameLayout
android:id="@+id/fragment_container"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg_color" >
</FrameLayout>
</RelativeLayout>
这是我的应用中的 2 个 fragment :
package com.example.admobinterstitial;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class Fragments
{
public static class MenuFragment extends Fragment
{
Context mContext;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mContext = activity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
final View rootView = inflater.inflate(R.layout.menu_fragment, container, false);
Button myButton = (Button) rootView.findViewById(R.id.myButton);
myButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
NextFragment newFragment = new NextFragment();
FragmentManager man = ((FragmentActivity)mContext).getSupportFragmentManager();
android.support.v4.app.FragmentTransaction transaction = man.beginTransaction();
transaction.replace(R.id.fragment_container, newFragment, newFragment.getClass().toString());
transaction.addToBackStack(null);
transaction.commit();
}
});
return rootView;
}
};
public static class NextFragment extends Fragment
{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
final View rootView = inflater.inflate(R.layout.next_fragment, container, false);
//TODO After showing the ad here, views in my R.layout.next_fragment won't show up after closing the ad.
//With those 2 lines commented, the views show up correctly...
if (MainActivity.mInterstitialAd.isLoaded())
MainActivity.mInterstitialAd.show();
return rootView;
}
};
}
在 MainActivity 中,我只是将我的 R.id.fragment_container 设置为我的 MenuFragment。在 MenuFragment 中,我有启动 NextFragment 的按钮(用此 fragment 替换 R.id.fragment_container)。问题出在 OnCreateView 的 NextFragment 类中...
我已经花了很多时间试图解决这个问题,现在我非常绝望,我什至准备了一个示例小型 eclipse 项目来展示这个问题: https://drive.google.com/file/d/0ByRNGNhz-adOQ091OU15c3ZUckE/view?usp=sharing
您必须在 strings.xml 中更改您的广告单元 ID,并在 MainActivity.java 中的 requestNewInterstitial 方法中设置您的测试设备 ID 以显示广告...(并且可能修复一些链接错误? - 不确定谷歌是否播放服务将为你们正确链接)
我将悬赏给任何解决问题的人......
更新 1:在我的一台设备上 - samsung galaxy s4 mini - 无论我使用测试广告还是真实广告都会出现问题。但似乎在我的另一台设备 LG-D320n 上,问题似乎只在使用测试广告时出现......我现在完全困惑......
更新 2:添加完整的应用程序 logcat(应用程序中没有任何崩溃,但抛出了很多消息。关闭广告后没有 View ,我使用“后退按钮”手动退出应用程序)
11-05 13:26:13.018: W/GooglePlayServicesUtil(15088): Google Play services out of date. Requires 8115000 but found 5084034
11-05 13:26:13.018: W/Ads(15088): Using InterstitialAdManager from the client jar.
11-05 13:26:13.018: I/Ads(15088): Starting ad request.
11-05 13:26:13.068: W/GooglePlayServicesUtil(15088): Google Play services out of date. Requires 8115000 but found 5084034
11-05 13:26:13.068: E/GooglePlayServicesUtil(15088): GooglePlayServices not available due to error 2
11-05 13:26:13.108: I/ActivityManager(15088): Timeline: Activity_idle id: android.os.BinderProxy@4205cbf0 time:107329054
11-05 13:26:13.188: I/Ads(15088): Not on service, return
11-05 13:26:13.488: I/chromium(15088): [INFO:CONSOLE(0)] "Document was loaded from Application Cache with manifest https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.appcache", source: https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html (0)
11-05 13:26:13.498: I/chromium(15088): [INFO:CONSOLE(0)] "Application Cache Checking event", source: https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html (0)
11-05 13:26:13.498: I/chromium(15088): [INFO:CONSOLE(0)] "Application Cache Checking event", source: https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html (0)
11-05 13:26:13.498: I/chromium(15088): [INFO:CONSOLE(0)] "Application Cache NoUpdate event", source: https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html (0)
11-05 13:26:13.498: I/chromium(15088): [INFO:CONSOLE(0)] "Application Cache NoUpdate event", source: https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html (0)
11-05 13:26:13.968: D/dalvikvm(15088): GC_FOR_ALLOC freed 1811K, 26% free 9199K/12400K, paused 52ms, total 52ms
11-05 13:26:14.038: W/AwContents(15088): nativeOnDraw failed; clearing to background color.
11-05 13:26:14.148: I/chromium(15088): [INFO:async_pixel_transfer_manager_android.cc(56)] Async pixel transfers not supported
11-05 13:26:14.218: I/chromium(15088): [INFO:async_pixel_transfer_manager_android.cc(56)] Async pixel transfers not supported
11-05 13:26:14.458: I/Ads(15088): Ad finished loading.
11-05 13:26:15.778: I/ViewRootImpl(15088): ViewRoot's Touch Event : Touch Down
11-05 13:26:15.898: I/ViewRootImpl(15088): ViewRoot's Touch Event : Touch UP
11-05 13:26:15.958: D/dalvikvm(15088): GC_FOR_ALLOC freed 2271K, 41% free 7316K/12400K, paused 31ms, total 32ms
11-05 13:26:16.308: I/ActivityManager(15088): Timeline: Activity_launch_request id:com.example.admobinterstitial time:107332251
11-05 13:26:16.318: I/Ads(15088): Ad opening.
11-05 13:26:16.378: D/dalvikvm(15088): GC_FOR_ALLOC freed 1553K, 40% free 7450K/12400K, paused 23ms, total 23ms
11-05 13:26:16.418: I/chromium(15088): [INFO:async_pixel_transfer_manager_android.cc(56)] Async pixel transfers not supported
11-05 13:26:16.488: I/chromium(15088): [INFO:async_pixel_transfer_manager_android.cc(56)] Async pixel transfers not supported
11-05 13:26:16.738: I/ActivityManager(15088): Timeline: Activity_idle id: android.os.BinderProxy@41f92ef0 time:107332684
11-05 13:26:18.418: I/ViewRootImpl(15088): ViewRoot's Touch Event : Touch Down
11-05 13:26:18.478: I/ViewRootImpl(15088): ViewRoot's Touch Event : Touch UP
11-05 13:26:18.508: I/Ads(15088): Starting ad request.
11-05 13:26:18.578: I/ActivityManager(15088): Timeline: Activity_idle id: android.os.BinderProxy@4205cbf0 time:107334523
11-05 13:26:18.648: I/Ads(15088): Not on service, return
11-05 13:26:18.748: I/chromium(15088): [INFO:CONSOLE(0)] "Document was loaded from Application Cache with manifest https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.appcache", source: https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html (0)
11-05 13:26:18.748: I/chromium(15088): [INFO:CONSOLE(0)] "Application Cache Checking event", source: https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html (0)
11-05 13:26:18.758: I/chromium(15088): [INFO:CONSOLE(0)] "Application Cache Checking event", source: https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html (0)
11-05 13:26:18.878: D/dalvikvm(15088): GC_FOR_ALLOC freed 593K, 29% free 8904K/12400K, paused 19ms, total 19ms
11-05 13:26:18.958: I/chromium(15088): [INFO:CONSOLE(0)] "Application Cache NoUpdate event", source: https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html (0)
11-05 13:26:18.958: I/chromium(15088): [INFO:CONSOLE(0)] "Application Cache NoUpdate event", source: https://googleads.g.doubleclick.net/mads/static/mad/sdk/native/sdk-core-v40.html (0)
11-05 13:26:19.118: W/AwContents(15088): nativeOnDraw failed; clearing to background color.
11-05 13:26:19.248: I/chromium(15088): [INFO:async_pixel_transfer_manager_android.cc(56)] Async pixel transfers not supported
11-05 13:26:19.308: I/chromium(15088): [INFO:async_pixel_transfer_manager_android.cc(56)] Async pixel transfers not supported
11-05 13:26:19.358: I/Ads(15088): Ad finished loading.
11-05 13:26:21.348: I/ViewRootImpl(15088): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=158, metaState=0, flags=0x48, repeatCount=0, eventTime=107337287, downTime=107337287, deviceId=7, source=0x101 } to com.android.internal.policy.impl.PhoneWindow$DecorView{41e7ae60 V.E..... R....... 0,0-480,800}
11-05 13:26:21.458: I/ViewRootImpl(15088): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_BACK, scanCode=158, metaState=0, flags=0x48, repeatCount=0, eventTime=107337403, downTime=107337287, deviceId=7, source=0x101 } to com.android.internal.policy.impl.PhoneWindow$DecorView{41e7ae60 V.E..... R....... 0,0-480,800}
11-05 13:26:22.358: I/ViewRootImpl(15088): ViewRoot's KeyEvent { action=ACTION_DOWN, keyCode=KEYCODE_BACK, scanCode=158, metaState=0, flags=0x48, repeatCount=0, eventTime=107338296, downTime=107338296, deviceId=7, source=0x101 } to com.android.internal.policy.impl.PhoneWindow$DecorView{41e7ae60 V.E..... R....... 0,0-480,800}
11-05 13:26:22.468: I/ViewRootImpl(15088): ViewRoot's KeyEvent { action=ACTION_UP, keyCode=KEYCODE_BACK, scanCode=158, metaState=0, flags=0x48, repeatCount=0, eventTime=107338412, downTime=107338296, deviceId=7, source=0x101 } to com.android.internal.policy.impl.PhoneWindow$DecorView{41e7ae60 V.E..... R....... 0,0-480,800}
最佳答案
尝试将您的广告展示代码包装成这样的 fragment :
rootView.post(
new Runnable() {
@Override
public void run() {
if (MainActivity.mInterstitialAd.isLoaded())
MainActivity.mInterstitialAd.show();
}
}
);
插页式广告可能会以某种方式损害 fragment 的生命周期。
或者您可以尝试使用 postDelayed(Runnable runnable, long delay);
进行试验,并以适当设置的延迟显示广告。也许这会有所帮助。
关于java - 在 OnCreateView 中显示 Admob 插页式广告时未加载 Android fragment 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33544190/
我有一个像这样的 fragment 栈 F1 -> F2 -> F3 -> F4 -> F5 现在我需要删除 F2、F3、F4 fragment 。 我需要如果我从 F5 fragment 按下后退按
我需要帮助来理解以下场景的工作原理以及如何实现结果。 我有一个名为 ShoppingCart 的类。它有一个名为 addItemsToShoppingCartFromPreviousOrder 的方法
我有一个包含 ViewPager 的 fragment 。这个 ViewPager 显然是由其他 Fragments 填充的。 我的问题是,ViewPager 中的 Fragment 是否有任何方法(
所以我正在实现一个 FragmentActivity 并尝试添加一个 fragment ,但是我遇到了多个问题。我以前做过这个,实际上我使用的代码与上一个项目(它工作的地方)相同,但由于某种原因它在这
Closed. This question needs details or clarity。它当前不接受答案。
我想将 Android X fragment (androidx.fragment.app.Fragment) 转换为 Android native fragment (android.app.Fra
假设我有一个包含 10 列文本类型 (20) 的 SQLite 表。 ListFragment 将从数据库中提取 4 列并使用 SimpleCursorAdapter 显示在列表中。 选择后,List
我有一个对话框 fragment ,我为延迟初始化创建了一个类。当我显示对话框时,它显示正常。但是,当我关闭对话框时,它崩溃的原因是: fragment 与 fragment 管理器无关。 我也尝试过
我想在 View 分页器更改为 fragment 时刷新该 fragment 。 package com.mcivisoft.rcbeam; import android.os.Bundle; imp
我有一个名为的 Activity MainActivity 我在容器 R.id.mainContainer 中添加了 fragment “BenefitFragment”。 在 BenefitFrag
所以我有这个 ClientListView,效果很好,可以显示客户,我可以单击一个客户并在右侧获取他们的详细信息(在我的第二个 fragment 中)。由此处的布局定义: 这很好用,但后来我
我试过这段代码,但点击第一个 fragment 中的按钮并没有改变第二个 fragment 中的字符串值。 这是第一个 fragment 的 kotlin 文件。它有两个按钮,点击它们可以更改字符串值
我有以下情况:我打开 fragment A 和目标,通过按钮的单击事件转到 fragment B。当我在 fragment B 中并点击后退按钮(为了返回 fragment A) 我想将一些参数传递给
我制作了一个 NavigationDrawer fragment ,其中包含 Home、Settings、Feedback 等项目。 home 项在点击 home 时应该打开,home 是在应用程序启
我正在一个接一个地替换 2 个 fragment ,两个 fragment 都有不同的选项菜单。当我替换第二个 fragment 时,它也显示第一个 fragment 的菜单。 setHasOptio
我有问题: android.app.Fragment$InstantiationException: Unable to instantiate fragment ${packageName}.${a
我正在研究 fragment 转换。当我用第二个 fragment 替换第一个 fragment 时,它出现在第一个 fragment 的下方。我希望它移动到第一个 fragment 之上。我该怎么做
我在抽屉导航里总共有 12 个 fragment 。每个 fragment 都有 volley 方法。每个 fragment 都显示自己的 Volley 响应,除了 position = 1 和 po
我在我的 Activity 中使用了两个 fragment 。最初我将向 Activity 添加一个 fragment 。然后在第一个 fragment 中使用监听器我想用第二个 fragment 替
我正在实现一个“fragments-101”程序,当相应的按钮被点击时我会替换一个 fragment 。然而,下面的事情发生了: 为什么会这样?为什么初始 fragment 没有被完全替换?MainA
我是一名优秀的程序员,十分优秀!