首页 > 解决方案 > Viewpager2 中的原生广告

问题描述

我有视频列表。我正在使用 Viewpager2 显示该视频。现在我想在每 5 个位置后显示原生广告。所以我为此做了一些代码。我创建了 2 个片段,其中一个片段具有视频播放器(其中显示所有视频),第二个片段具有 fb 原生广告。现在(这是我卡住的地方)我做的代码有两个问题,

问题 1.我在每 5 个位置之后添加了 VideoFragmentNative,所以每当添加该片段时,它占据 1 个位置,所以如果我有 20 个视频的列表,最后 4 个视频将不会显示,因为我添加了 VideoFragmentNative。那么如何解决呢?

问题 2.添加 VideoFragmentNative IF 广告未加载或失败(无填充或其他内容)后,我想删除该位置上的片段。那么如何去除呢?(这部分代码我没有这样做)我在stackoverflow上检查了删除片段,但在所有代码中它都是从位置和notifydatasetChanged()中删除的,但是我在适配器中添加了片段,那么如何从片段内部删除它?


这是我的适配器

package com.dashingdisco.app.downloader.viewpager

import android.os.Bundle
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.dashingdisco.app.downloader.VideoActivity
import com.dashingdisco.app.downloader.model.MediaFiles
import com.orhanobut.logger.Logger

class MyPagerAdapter(val activity: VideoActivity, val media: ArrayList<MediaFiles>, val whereFrom: Int) : FragmentStateAdapter(activity){

    override fun getItemCount()= media.size
    var first:Int=1
    var last:Int=1
    var firstTime=true

    override fun createFragment(position: Int): Fragment {
        Logger.e("createFragment-->$position")

        var fragment:Fragment

        if(firstTime){
            firstTime=false

           val medium = media[position]
            val bundle = Bundle()
            bundle.putSerializable(MEDIUM, medium)
            bundle.putInt(WHEREFROM,whereFrom)
            fragment = VideoFragment()

            fragment.arguments = bundle
            fragment.listener = activity
        }
        else{

            if(position != 0 && position% 5 == 0){
                first++
                val medium = media[position]
                val bundle = Bundle()
                bundle.putSerializable(MEDIUM, medium)
                bundle.putInt(WHEREFROM,whereFrom)
                fragment = VideoFragmentNative()

                fragment.arguments = bundle


            }
            else{
                Logger.e("first-->$first\nlast-->$last")
                var medium :MediaFiles
                if(position != 0 && first>last){
                    last=first
                    val fPosition=position-1
                    medium = media[fPosition]
                }
                else{
                    medium = media[position]
                }

                val bundle = Bundle()
                bundle.putSerializable(MEDIUM, medium)
                bundle.putInt(WHEREFROM,whereFrom)
                fragment = VideoFragment(viewPager)

                fragment.arguments = bundle
                fragment.listener = activity
            }
        }



        return fragment
    }


}

所以请帮我纠正这个错误,或者如果有任何其他方法可以在 Viewpager 中添加原生广告请分享如何添加它并在需要时动态删除它?如果您能提供一些代码,我将不胜感激

标签: androidkotlinandroid-fragmentsandroid-viewpager2native-ads

解决方案


推荐阅读