Я перешел на библиотеки androidx.preference .-- и новый PreferenceFragmentCompat использует RecyclerView вместо ListView.У меня есть пользовательское представление предпочтений, которое содержит AdMob Smart Banner, и я сталкиваюсь с проблемами, когда прокрутка за AdView изменяет размер всех ячеек, а при обратной прокрутке - все ячейки.
Предпочтение AndroidX использует onBindViewHolder, а не onCreateView, что является проблемой для адаптации.
Строка, которая вызывает это, holder.setIsRecyclable(false);
.Без этого AdViews начинают дублироваться и никогда не удаляются, поэтому я считаю, что флаг false
неизбежен.Возможно, виновником является LinearLayout.addView (mAdView), но я не могу найти другой способ показа объявлений без него.
Вот все из AdPref.java
, оно расширяется androidx.preference.Preference
public class AdPref extends Preference {
static AdView mAdView;
//DEFAULT CONSTRUCTORS
//...
//...//
@Override
public void onBindViewHolder(PreferenceViewHolder holder) {
LinearLayoutCompat ll = (LinearLayoutCompat) holder.findViewById(R.id.lAd);
holder.setDividerAllowedAbove(false);
holder.setDividerAllowedBelow(false);
holder.setIsRecyclable(false); // SOLVES ONE PROBLEM, CREATES ANOTHER
MobileAds.initialize(getContext(), "id");
mAdView = new AdView(getContext());
mAdView.setAdSize(AdSize.SMART_BANNER);
mAdView.setAdUnitId("id");
AdRequest adRequest = new AdRequest.Builder().addTestDevice(AdRequest.DEVICE_ID_EMULATOR).build();
mAdView.loadAd(adRequest);
ll.addView(mAdView);
super.onBindViewHolder(holder);
}
Каков оптимальный способ загрузки / удаления рекламы, когда пользователь прокручивает и выходит из видимого диапазона?