>

이것은 어리석은 질문이지만, 이것은 나의 하루를 망치고있다 ...

조각에 리사이클 러 뷰가 있습니다

override fun setUpRecyclerView(pics: List<Pictures>) {
    recyclerView.setHasFixedSize(true)
    layoutManager = LinearLayoutManager(context)
    recyclerView.setLayoutManager(layoutManager)
    mAdapter = NewsAdapter(pics, childFragmentManager)
    recyclerView.setAdapter(mAdapter)
}

NewSdapter는 :

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 메소드는 이와 같이 글라이드를 사용하여 이미지를로드하는 이미지 뷰의 확장 된 기능입니다

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

그리고 올바르게 호출되고 있습니다.

PagerStateAdapter를 사용해 보았고 ChildFragmentManager를 ViewPager의 어댑터로 전달하고 있음을 고려합니다.

만약 당신이 나를 도울 수 있다면, 당신은 내 하루를 구할 것입니다. 미리 감사드립니다


  • 답변 # 1

    이 작동하지 않습니다. 가는 길은 재활용 자로 재활용하는 것입니다. ViewPager로 시뮬레이션하려면 https://github.com/rubensousa/RecyclerViewSnap을 MATCH_PARENT와 함께 사용할 수 있습니다. 어린이 조회수.

관련 자료

  • 이전 algorithm - 재귀를 사용하여 목록의 첫 번째 요소와 마지막 요소 찾기
  • 다음 wpf의 ListView 분할 행 셀