web-dev-qa-db-fra.com

Insertion d'une annonce native AdMob dans une liste

J'aimerais utiliser la nouvelle fonctionnalité d'annonce native AdMob dans mon application. Je souhaite placer une annonce native dans une liste, où chaque 20 élément ou plus de la liste est une annonce. Est-il possible d'y parvenir avec une annonce Native Express? Ou dois-je utiliser une annonce Natve Advanced?

10
AcFreeman

Eh bien @ Jagjit a montré la bonne approche. Je vais l'écrire étape par étape
1. Créez votre propre adaptateur personnalisé (en étendant BaseAdapter) qui sera affiché sous forme d’éléments de listview
2. Créez un autre fichier de ressources de présentation pour afficher une annonce native (la conception doit être similaire à l'adaptateur personnalisé créé à l'étape ci-dessus)
3. Dans la méthode getView, effectuez l'une des opérations suivantes (pour afficher l'annonce en 2e position)

if (position == 1) {
    rowView = inflater.inflate(R.layout.native_ad_adapter, null);
    NativeExpressAdView adView = (NativeExpressAdView)rowView.findViewById(R.id.adView);
    AdRequest adRequest = new AdRequest.Builder().build();
    adView.loadAd(adRequest);
} else {
    rowView = inflater.inflate(R.layout.my_custom_list, null);
    TextView bigtxt = (TextView) rowView.findViewById(R.id.txt1);
    ...
    ...
}

Ici, votre adaptateur personnalisé est my_custom_list
Vous verrez que les annonces sont en cours de chargement. Mais il y a un petit problème, l'élément de la liste à la position 1 ne sera pas affiché .
4. Pour cela, ajoutez un élément supplémentaire à la liste avant de renseigner la variable ListView. J'ai utilisé ArrayList pour pouvoir le faire facilement. Mon approche est la suivante

arrayList1.add(1,"ad here");
listview1.setAdapter(new MyAdapter(callerView.getContext(), arrayList1.toArray(new String[arrayList1.size()])));

J'imagine que Admobadapter lib est ce que vous recherchez ... il encapsule votre adaptateur pour qu'il récupère et affiche automatiquement les blocs d'annonces de chaque élément X de votre liste ou de votre vue recyclée. Vous le faites juste comme suit: 1. Configurer un wrapper de type approprié (il existe en principe 4 wrappers - pour une liste, pour un aperçu du recyclage pour afficher les annonces avancées et 2 pour les annonces Express) 2. injectez votre adaptateur dans l'emballage 3. injectez wrapper dans listview/recyclerview 4. Remplissez votre adaptateur avec vos données, soulevez onDataSetChanged () puis l'encapsuleur fera le travail lui-même.

En outre, il prend également en charge les annonces natives Express et les annonces natives avancées. Selon cette issue , ils vont bientôt ajouter un support Maven/Gradle. Bonne chance!

2
kot331107

L'approche consiste à étendre BaseAdapter et à créer votre propre adaptateur personnalisé, au lieu d'utiliser le paramètre ArrayAdapter par défaut. Ensuite, vous devez renvoyer une vue "Annonce" à la place de la vue habituelle lorsque vous souhaitez afficher une annonce. Cela signifie que vous devez remplacer getCount () pour renvoyer plus de lignes (par exemple, si vous avez 10 lignes, cela signifie que vous devez renvoyer 11 = 10 contenu réel + 1 annonce).

Ensuite, vous devez décider dans quelle position créer cette vue. Je pense que vous pouvez le faire en vérifiant simplement la variable de position:

if (position == VALUE) {
   // Create and return Ad View 
} else {
   // Create and return a normal View 
}

J'espère que ça aide. J'ai trouvé cela comme le meilleur jusqu'à ce que j'espère trouver une meilleure façon optimisée pour cette

2
Jagjit Singh

Vous devez créer votre propre vue de liste personnalisée et votre adaptateur personnalisé.

  1. Créer une vue de défilement et une LinearLayout en tant qu'enfant
  2. Créez votre modèle en tant que mise en page XML qui gérera votre contenu
  3. Créez une classe qui va dans Inflat votre Layout à la LinearLayout dans la ScrollView Comme ça :

    private static void CreateIntemEmptty(Context context, ViewGroup view) {
        LayoutInflater inflater = (LayoutInflater) Home.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View child = inflater.inflate(R.layout.empty, null);
        ViewGroup Prnt =(ViewGroup)view.getParent().getParent();
        Prnt.removeViewInLayout((View)view.getParent());
        ViewGroup.LayoutParams p =new ViewGroup.LayoutParams(Prnt.getWidth(),Prnt.getHeight());
        Prnt.addView(child,p);
    }
    

    dans ce code je crée un élément vide et l'ajoute 

  4. Vous pouvez ajouter l’ADS dans la LinearLayout en tant qu’enfant.

0
Hakim Douib