У меня есть ViewPager с слайдами. После каждого пятого слайда я хочу показать полноэкранное объявление. Я использую Flurry для рекламного сервиса. Я успешно добавил рекламу, и они работают.Объявление в полноэкранном режиме ViewPager
Задача: Объявления загружаются слишком медленно. Когда пользователь переключается на 5-й слайд, для объявления требуется около 3-4 секунд.
Мой подход:
- Я пытался поставить выборки код в
onStart
метод для загрузки быстрее, но тогда объявления просто не появляются больше. Каждый раз, когда viewpager меняет слайд, фрагмент, содержащий объявление, уничтожается, а затем на новом слайде он должен повторно подключаться к Flurry. Я попытался поместить соединение в основное действие, которое запускает приложение, чтобы подключиться раньше, но тогда соединение не может быть замечено в фрагменте.
public class CardFragment extends Fragment { private final String kLogTag = "FlurryAdServingAPI"; Card mCard; TextView mTextView; private ViewPager mViewPager; private MenuItem mAddToFavorite; private AudioPlayer mPlayer = new AudioPlayer(); private FlurryAdInterstitial mFlurryAdInterstitial = null; private String mAdSpaceName = "12thcard"; private FrameLayout mAdLayout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); mCard = (Card) getArguments().getSerializable(EXTRA_CARD_ID); GameManager.get(getActivity()).changeCardTimesDisplayed(mCard); mViewPager = (ViewPager) getActivity().findViewById(R.id.viewPager); mFlurryAdInterstitial = new FlurryAdInterstitial(getActivity(), mAdSpaceName); mFlurryAdInterstitial.setListener(interstitialAdListener); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_card, parent, false); mAdLayout = (FrameLayout)v.findViewById(R.id.bannerframe); if(mViewPager.getCurrentItem()%5 == 0) { Log.i("FluryTag", "Show ad"); FlurryAds.fetchAd(getActivity(), mAdSpaceName, mAdLayout, FlurryAdSize.FULLSCREEN); FlurryAds.displayAd(getActivity(), mAdSpaceName, mAdLayout); } mTextView = (TextView) v.findViewById(R.id.questionText); mTextView.setText(mCard.getText()); return v; } @Override public void onDestroy() { super.onDestroy(); mPlayer.stop(); } public void onStart() { super.onStart(); try { Log.d(kLogTag, "onStartSession: "+ AppConstants.FLURRY_API_KEY); FlurryAgent.onStartSession(getActivity(), AppConstants.FLURRY_API_KEY); mFlurryAdInterstitial.fetchAd(); } catch (Exception e) { Log.e(kLogTag, e.getMessage()); } } public void onStop() { super.onStop(); FlurryAgent.onEndSession(getActivity()); mFlurryAdInterstitial.destroy(); Log.d(kLogTag, "onEndSession"); } }
FlurryAdinterstitialListener
FlurryAdInterstitialListener interstitialAdListener = new FlurryAdInterstitialListener() { @Override public void onFetched(FlurryAdInterstitial adInterstitial) { Log.d(kLogTag, "onFetched(" + adInterstitial + ")"); adInterstitial.displayAd(); } @Override public void onError(FlurryAdInterstitial adInterstitial, FlurryAdErrorType adErrorType, int errorCode) { Log.d(kLogTag, "onError(" + adInterstitial + ")"); Log.d(kLogTag, "onError adErrorType(" + adErrorType + ")"); Log.d(kLogTag, "onError errorCode(" + errorCode + ")"); adInterstitial.destroy(); } //.. //the remainder of listener callbacks };
Идеи: я иду в неправильном направлении? Я имею в виду природу ViewPager - создавать и отбрасывать фрагменты, и если каждому фрагменту требуется время для подключения к сервису, выберите объявление, а затем отобразите его. Возможно, я не должен показывать рекламу в ViewPager.
Я хочу сделать то же самое. Можете ли вы поделиться своим кодом, как вы показали объявление после 5 прокрутки в viewpager. –