Реклама Android Admob в PreferenceActivity

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

25
задан lacas 16 February 2011 в 17:27
поделиться

3 ответа

То, что вы также можете сделать, - это создать пользовательскую настройку, которую можно легко добавить на любой экран настроек.

Добавьте файл макета с именем ad_layout.xml в папку res / layout, который позже будет заполнен AdMob.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" android:orientation="vertical">  
</LinearLayout>

Создайте класс с именем AdPreference следующим образом:

package com.example.adpreference;

import com.google.ads.AdRequest;
import com.google.ads.AdSize;
import com.google.ads.AdView;

import android.app.Activity;
import android.content.Context;
import android.preference.Preference;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;

public class AdPreference extends Preference {

    public AdPreference(Context context, AttributeSet attrs, int defStyle) {super    (context, attrs, defStyle);}
    public AdPreference(Context context, AttributeSet attrs) {super(context, attrs);}
    public AdPreference(Context context) {super(context);}

    @Override
    protected View onCreateView(ViewGroup parent) {
        // this will create the linear layout defined in ads_layout.xml
        View view = super.onCreateView(parent);

        // the context is a PreferenceActivity
        Activity activity = (Activity)getContext();

        // Create the adView
        AdView adView = new AdView(activity, AdSize.BANNER, "<your add id>");

        ((LinearLayout)view).addView(adView);

        // Initiate a generic request to load it with an ad
        AdRequest request = new AdRequest();
        adView.loadAd(request);     

        return view;    
    }
}

Теперь в XML-файле настроек вы можете просто добавить любую понравившуюся вам позицию (вверху или между любыми другими настройками).

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    ...

    <com.example.adpreference.AdPreference android:layout="@layout/ad_layout"/>

    ...
</PreferenceScreen>
29
ответ дан P.Melch 16 February 2011 в 17:27
поделиться

Дэн Дайер отвечает правильно. Я хотел бы пояснить немного, чтобы прояснить это на примере. Вы можете использовать такой макет (он называется config.xml в res / layout).

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:myapp="http://schemas.android.com/apk/res/com.xxxx" android:layout_height="fill_parent"
                android:layout_width="fill_parent">

    <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="fill_parent"/>

    <com.admob.android.ads.AdView
            android:id="@+id/ad"
            android:layout_alignParentBottom="true"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            myapp:backgroundColor="#000000"
            myapp:primaryTextColor="#FFFFFF"
            myapp:secondaryTextColor="#CCCCCC"/>

</RelativeLayout>

В своей деятельности, которая расширяет PreferenceActivity, вы пишете что-то подобное в методе onCreate;

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.config);
  }
14
ответ дан Glenn Bech 16 February 2011 в 17:27
поделиться
ViewGroup viewGroup = (ViewGroup) findViewById(android.R.id.list).getParent().getParent().getParent();
viewGroup.addView(new AdView(...));
2
ответ дан kreker 16 February 2011 в 17:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: