【问题标题】:Fragment inside a viewpager doesnt show when is in recyclerviewviewpager 中的片段在 recyclerview 中时不显示
【发布时间】:2018-03-07 08:22:12
【问题描述】:

也许这是一个愚蠢的问题,但这毁了我的一天......

我在片段中有一个回收站视图

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 的适配器。

如果你能帮助我,你会拯救我的一天。提前致谢

【问题讨论】:

    标签: android android-fragments kotlin android-nested-fragment


    【解决方案1】:

    这不起作用。要走的路是回收商变成回收商。如果您想模拟为 ViewPager,您可以使用 https://github.com/rubensousa/RecyclerViewSnap 和 MATCH_PARENT 子视图。

    【讨论】:

      猜你喜欢
      • 2022-08-18
      • 1970-01-01
      • 2015-10-16
      • 2016-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多