【问题标题】:Image not shown in ViewPager2 (when Fragment reopened)ViewPager2 中未显示图像(片段重新打开时)
【发布时间】:2021-09-24 04:46:08
【问题描述】:

我在我的 Android 应用程序的 Fragment 中实现了 ViewPager2,它将使用 Uri 加载的图像显示到 ImageView(幻灯片库)中。一切正常,但是,当我关闭并重新打开片段时,图像不会被加载。只有当我开始滑动 ViewPager2 时,图像才会再次加载到 ViewPager2 中。奇怪的是,此错误仅发生在较旧的 Android 版本上(已在 Android 6 上测试过),但不会出现在较新的版本(Android 10)上。我认为它可能与 Fragment(缓存或其他东西)有关,因为如果我在 Activity 中实现相同的代码,关闭并重新打开它,则不会发生错误。

知道如何解决此问题,以便始终将图像加载到 Fragment 中的 ViewPager2 中吗?

Fragment 中实现ViewPager2 的代码:

val media= utilities.getMedia(this)
val mediaList = media.toMutableList()
       
val adapter = ViewPagerAdapter(mediaList)
photo_view_pager.adapter = adapter       

ViewPagerAdapter:

class ViewPagerAdapter (
    private val images: List<Media>
        ) : RecyclerView.Adapter<ViewPagerAdapter.ViewPagerViewHolder>() {
    inner class ViewPagerViewHolder(itemView: View): RecyclerView.ViewHolder(itemView)

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewPagerViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.item_picture, parent, false)
        return ViewPagerViewHolder(view)
    }

    override fun getItemCount(): Int {
        return images.size
    }

    override fun onBindViewHolder(holder: ViewPagerViewHolder, position: Int) {
        val curImageUri = images[position].uri
        val thumbnail = holder.itemView.image_preview
        thumbnail.post {
            Glide.with(thumbnail)
                .load(curImageUri)
                .into(thumbnail)
        }
    }
}

提前感谢您的帮助!

【问题讨论】:

    标签: android android-fragments android-recyclerview android-viewpager android-viewpager2


    【解决方案1】:

    请尝试以下带图片的viewpager方式

     <androidx.viewpager.widget.ViewPager
                android:id="@+id/viewPager"
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    
    
    class MyFragment : Fragment{
    
        override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
            return super.onCreateView(inflater, container, savedInstanceState)
            initPager()
        } 
    
        var pagerAdapter: PagerAdapter? = null
        fun initPager() {
            pagerAdapter = PagerAdapter(activity,mlist)
    
            viewPager.adapter = pagerAdapter
            viewPager.offscreenPageLimit = mlist.size
    
            viewPager.addOnPageChangeListener(object :
                ViewPager.OnPageChangeListener {
                override fun onPageScrolled(
                    position: Int,
                    positionOffset: Float,
                    positionOffsetPixels: Int
                ) {
                }
    
                override fun onPageSelected(position: Int) {
                   
                }
    
                override fun onPageScrollStateChanged(state: Int) {}
            })
        }
    }
    
    
    
    
    class PagerAdapter(manager: FragmentManager) : PagerAdapter(manager) {
    
        private val mlist: ArrayList<Int>? = null
        private val inflater: LayoutInflater? = null
        private val context: Context? = null
        override fun destroyItem(container: ViewGroup, position: Int, `object`: Any) {
            container.removeView(`object` as View)
        }
    
        override fun getCount(): Int {
            return mlist.size()
        }
    
        override fun restoreState(state: Parcelable?, loader: ClassLoader?) {}
        override fun saveState(): Parcelable? {
            return null
        }
    
        override fun isViewFromObject(view: View, `object`: Any): Boolean {
            return view.equals(`object`)
        }
    
        override fun getPageTitle(position: Int): CharSequence? {
            return mFragmentTitleList[position]
        }
    
        override fun instantiateItem(view: ViewGroup, position: Int): Any {
            val imageLayout: View = inflater.inflate(R.layout.layout_image, view, false)!!
            thumbnail.post {
                Glide.with(imageLayout.context)
                        .load(mlist.get(position).imageurl)
                        .into(imageView)
            }
            view.addView(imageLayout, 0)
            return imageLayout
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多