Помещение собственного объявления AdMob в listView

Я хотел бы использовать новые функциональные возможности AdMob в своем приложении. Я хочу поместить собственное объявление в списокView, где каждый 20-й элемент или около того в списке является объявлением. Можно ли достичь этого с помощью объявления для мобильных устройств? Или мне нужно использовать расширенное объявление Natve?

Подходом является расширение BaseAdapter и создание собственного адаптера вместо использования ArrayAdapter по умолчанию. Затем вам нужно вернуть «Ad» View вместо обычного обычного представления, когда вы хотите отображать объявление. Это означает, что вам нужно переопределить getCount (), чтобы вернуть больше строк (например, если у вас есть 10 строк, это означает, что вам нужно вернуть 11 = 10 фактического контента + 1 объявление)

Затем вам нужно решить, в какой позиции для создания этого представления, я думаю, вы можете сделать это, просто проверив переменную положения:

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

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

Ну @ Jagjit показал правильный подход. Я напишу его шаг за шагом
1. Создайте свой собственный адаптер (путем расширения BaseAdapter ), который будет отображаться как элементы списка
2. Создайте другой файл ресурсов макета для отображения собственного объявления (дизайн должен быть похож на пользовательский адаптер, созданный на предыдущем шаге)
3. В методе getView сделайте следующее (для показа объявления на 2-й позиции)

 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); ... ... } 

Здесь ваш пользовательский адаптер – my_custom_list
Вы увидите, что объявления загружаются. Но есть небольшая проблема, фактический элемент списка в позиции 1 не будет показан.
4. Для этого добавьте дополнительный элемент в список перед ListView . Я использовал ArrayList чтобы я мог сделать это легко. Мой подход выглядит следующим образом

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

Вам необходимо создать собственный пользовательский список и пользовательский адаптер.

  1. Создайте вид прокрутки и LinearLayout как дочерний
  2. Создайте свой шаблон в виде XML-макета, который будет обрабатывать ваш контент.
  3. Создайте класс, который будет в Inflat вашего макета для LinearLayout В ScrollView . Как это :

     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); } 

    В этом коде я создаю пустой элемент и добавляю его

  4. Вы можете добавить ADS в LinearLayout в качестве ребенка.

Я предполагаю, что Admobadapter lib – это то, что вы ищете … он обертывает ваш адаптер, чтобы автоматически извлекать и показывать рекламные блоки в каждом элементе X в вашем списке или recyclerview. Вы просто делаете это следующим образом: 1. установите обертку подходящего типа (в основном, 4 обертки – для списка, для повторного просмотра, чтобы показать расширенные объявления и 2 для экспресс-объявлений). 2. Внесите свой адаптер в обертку. 3. введите Wrapper to listview / recyclerview 4. заполните ваш адаптер своими данными, поднимите onDataSetChanged (), тогда обертка сделает сам материал.

Также он поддерживает собственные объявления Express и расширенные собственные объявления. Согласно этой проблеме они собираются добавить поддержку Maven / Gradle в ближайшее время. Удачи!