Super.onActivityCreated和getview无法使用ActionBarActivity

时间:2015-01-04 22:15:04

标签: android android-fragments admob

我想使用以下代码将adFragment添加到我的应用程序中:

public  class AdFragment extends ActionBarActivity {


    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_ad, container, false);
    }

    @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        AdView mAdView = (AdView) getView().findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
    }
}

问题是Android Studio说明了

无法为super.OnActivityCreated解析onActivityCreated(Android.os.Bundle)方法

无法为下一行解析方法getView()

我已经尝试过,如果我将ActionBarActivity替换为Fragment,则没有问题,但基于 http://developer.android.com/training/basics/fragments/creating.html

ActionBarActivity应该有效。

有没有人对可能的解决方案有任何想法?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

以下内容适用于Fragment

与膨胀布局相关的任何代码都应在onViewCreated中。 (您希望视图不是活动,对吗?)onViewCreated之后调用onCreateViewview参数是您夸大的参数。

AdView mAdView;

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);

    mAdView = (AdView) view.findViewById(R.id.adView);

    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);
}

编辑:根据新事件

以下内容适用于Activity(或FragmentActivityActionBarActivity)。

AdView mAdView;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.my_layout); // the layout with this id will be inflated

    mAdView = (AdView) findViewById(R.is.adView);

    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);

    // ...
}

编辑2

我不知道广告视图的工作原理。也许你不必每次都加载广告,因为它记得。尝试这样做:

if (savedInstanceState == null) {
    AdRequest adRequest = new AdRequest.Builder().build();
    mAdView.loadAd(adRequest);
}