簡體   English   中英

ViewPager中的片段何時不顯示在回收站視圖中

[英]Fragment inside a viewpager doesnt show when is in recyclerview

也許這是一個愚蠢的問題,但這卻毀了我的一天。

我在片段中有一個recyclerview

override fun setUpRecyclerView(pics: List<Pictures>) {
    recyclerView.setHasFixedSize(true)

    layoutManager = LinearLayoutManager(context)
    recyclerView.setLayoutManager(layoutManager)

    mAdapter = NewsAdapter(pics, childFragmentManager)
    recyclerView.setAdapter(mAdapter)
}

NewsAdapter是:

class NewsAdapter
        (private val mDataset: List<Pictures>, private val fragmentManager: FragmentManager)
    : RecyclerView.Adapter<NewsAdapter.ViewHolder>() {

    class ViewHolder(v: View) : RecyclerView.ViewHolder(v) {
        var authorTextView: TextView
        var viewPager: ViewPager
        var indicator: CircleIndicator

        init {
            authorTextView = v.findViewById<View>(R.id.tv_author) as TextView
            viewPager = v.findViewById<View>(R.id.viewPager) as ViewPager
            indicator = v.findViewById<View>(R.id.indicator) as CircleIndicator
        }
    }

    override fun onCreateViewHolder(parent: ViewGroup,
                                    viewType: Int): NewsAdapter.ViewHolder {
        val v = LayoutInflater.from(parent.context)
                .inflate(R.layout.item_preview, parent, false)

        return ViewHolder(v)
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        val pictureList = mDataset.get(position)
        holder.titleTextView.text = pictureList.title
        holder.authorTextView.text = pictureList.author
        showContent(pictureList.content, holder.viewPager, holder.indicator)
    }

    fun showContent(contentModel: List<ContentModel>, viewPager: ViewPager, indicator: CircleIndicator) {
        if (contentModel.size <= 1) {
            indicator.hide()
        }
        viewPager.adapter = GalleryContentAdapter(fragmentManager, contentModel)
        indicator.setViewPager(viewPager)
    }

    override fun getItemCount(): Int = mDataset.size
}

GalleryContentAdapter是:

class GalleryContentAdapter(fm: FragmentManager, val contentModels: List<ContentModel>) : FragmentPagerAdapter(fm) {
    val galleryContentFactory: GalleryContentFactory = GalleryContentFactory()

    override fun getItem(position: Int): Fragment = galleryContentFactory.getFragment(contentModels[position])

    override fun getCount(): Int = contentModels.size
}

從現在開始,我只處理一種內容,工廠是如此簡單,但這是代碼:

class GalleryContentFactory {
    fun getFragment(contentModel: ContentModel): Fragment {
        when (contentModel.type) {
            "PICTURE" -> return PictureFragment.newInstance(contentModel.value)
        }
        return PictureFragment.newInstance(contentModel.value)
    }
}

最后是PictureFragment:

class PictureFragment : NewsContentFragment() {

    companion object {
        val KEY = "PictureFragment.URL"

        fun newInstance(url: String): NewsContentFragment {
            val fragment = PictureFragment()
            val bundle = Bundle()
            bundle.putString(KEY, url)
            fragment.arguments = bundle
            return fragment
        }
    }

    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?,
                              savedInstanceState: Bundle?): View? {

        return inflater.inflate(R.layout.fragment_news_gif, container, false)
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        arguments?.getString(KEY).let {
            view.image.loadUrl(it!!)
        }
    }
}

調試代碼時,我檢查是否正在執行view.image.loadUrl(it!!)行,但未呈現任何內容。

loadUrl方法是imageviews的擴展函數,該函數使用Glide這樣加載圖像

fun ImageView.loadUrl(url: String) {
    GlideApp.with(context).load(url).into(this)
}

並被正確調用。

我還嘗試了PagerStateAdapter,並考慮到將ChildFragmentManager傳遞給ViewPager的適配器。

如果可以幫助我,您將拯救我的一天。 提前致謝

這行不通。 要走的路是將回收商轉變為回收商。 如果要模擬為ViewPager,則可以在子視圖中將https://github.com/rubensousa/RecyclerViewSnap與MATCH_PARENT一起使用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM