필자는 필자의 작업에서 두 조각으로 된 TabLayout/ViewPager를 가지고 있습니다. 탭이 생성 된 다음 몇 가지 정보를 요청합니다. 이 정보를 얻으면 각 탭의 RecyclerView를 업데이트합니다.다른 프래그먼트에서 프래그먼트의 목록 변경이 변경되고 있습니다.
주요 활동
private fun setViews() {
val adapter = TabsAdapter(supportFragmentManager)
adapter.addFragment(NewsFragment(), getString(R.string.dossier_activity_news))
adapter.addFragment(PhotosFragment(), resources.getString(R.string.dossier_activity_photos))
view_pager.adapter = adapter
tab_layout.setupWithViewPager(view_pager)
// request info
}
fun setPages(pages: List<Page>) {
// got info
((view_pager.adapter as TabsAdapter).getItem(0) as NewsFragment).setPages(pages)
((view_pager.adapter as TabsAdapter).getItem(1) as PhotosFragment).setPages(pages)
}
문제는 : 두 번째 탭 (PhotosFragment), 나는 제거 사진/축소를 포함하지 않는 모든 페이지를 원하는. 내가 두 번째 탭에서이 반복자를 만들 때
NewsFragment
fun setPages(pages: List<Page>) {
if (pages.isNotEmpty()) recycler_view.adapter = PagesAdapter(this, pages)
}
PhotosFragment는
fun setPages(pages: List<Page>) {
val iterator = (pages as ArrayList<Page>).iterator()
while (iterator.hasNext()) if (iterator.next().thumbnail == null) iterator.remove()
if (pages.isNotEmpty()) recycler_view.adapter = PagesAdapter(this, pages)
}
, 첫번째 조각의 모든 페이지는 어떤 사진/미리보기 페이지에 업데이트됩니다 . 각 프래그먼트는 자체 라이프 사이클을 가지고 있으며 한 프래그먼트의 내용을 변경하여 다른 프래그먼트를 업데이트하지 않아야합니다.
내 페이지 수 때문입니다 .Adobe RecyclerView를 확장할까요?
PagesAdapter
class PagesAdapter(private var fragment: Fragment, private var pages: List<Page>): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
override fun onCreateViewHolder(parent: ViewGroup, type: Int): RecyclerView.ViewHolder {
return when (type) {
0 -> HeaderViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.article_header_item, parent, false))
else -> ArticleViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.article_item, parent, false))
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
val type = getItemViewType(position)
when (type) {
0 -> setHeader(holder as PagesAdapter.HeaderViewHolder, position)
else -> setArticle(holder as PagesAdapter.ArticleViewHolder, position)
}
}
inner class HeaderViewHolder internal constructor(view: View) : RecyclerView.ViewHolder(view) {
val layout: RelativeLayout = view.article_header_layout
val image: ImageView = view.article_header_image
val title: AOTextView = view.title_header_text
val date: AOTextView = view.date_header_text
}
inner class ArticleViewHolder internal constructor(view: View) : RecyclerView.ViewHolder(view) {
val layout: RelativeLayout = view.article_layout
val image: ImageView = view.article_image
val strapline: AOTextView = view.strapline_text
val title: AOTextView = view.title_text
val date: AOTextView = view.date_text
}
}
두 조각 같은 페이지 목록을 가지고,하지만 난 두 번째 조각의 사진/썸네일 만 페이지를 표시하려면이 목록을 필터링 할 수 있습니다. 두 번째 조각에서 목록을 필터링하면 첫 번째 조각은 동일한 필터링 된 목록을 표시합니다. 나는 이것을 다르게 적용해야 하는가? 아니면 내 코드에 버그가 있습니까?
이 대답은 내 문제를 해결했습니다! 고맙습니다! – Ravers