繁体   English   中英

如何在 Kotlin 中打开 Recyclerview 的“详细信息”片段

[英]How to open a "Details" Fragment onclick of Recyclerview in Kotlin

我有家庭片段,我希望它转到另一个片段,该片段将显示其“详细信息”,它将单击的 recyclerview 项目的数据传递给该“详细信息”片段。

在此处输入图像描述

当我单击文章时,它将移至传递数据的详细文章。

至于代码,这是适配器:

class ArticleAdapter(private val articleList: ArrayList<Article>) :
    RecyclerView.Adapter<ArticleAdapter.MyViewHolder>() {
    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
        val binding = ItemArticleBinding.inflate(LayoutInflater.from(parent.context), parent, false)
        return MyViewHolder(binding)
    }

    override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
        val data = articleList[position]
        holder.bind(data)
    }

    class MyViewHolder(private val binding: ItemArticleBinding) :
        RecyclerView.ViewHolder(binding.root) {
        fun bind(data: Article) {
            Glide.with(binding.root.context)
                .load(data.img)
                .into(binding.articleImage)
            binding.articleTitle.text = data.title

            binding.root.setOnClickListener {
                val article = Article(
                    data.title,
                    data.img,
                    data.content
                )
            }
        }
    }

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

这是我的详细信息片段

class DetailArticleFragment : Fragment() {
    private var _binding: FragmentDetailArticleBinding? = null
    private val binding get() = _binding!!

    override fun onCreateView(
        inflater: LayoutInflater,
        container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        _binding = FragmentDetailArticleBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val intent = Intent(binding.root.context, DetailArticleFragment::class.java)
        val article = intent.getParcelableExtra<Article>(DETAIL_ARTICLE) as Article
        Glide.with(this)
            .load(article.img)
            .into(_binding!!.articleImage)
        _binding!!.articleTitle.text = article.title
        _binding!!.articleDescription.text = article.content
    }

    override fun onDestroyView() {
        super.onDestroyView()
        _binding = null
    }
    companion object {
        const val DETAIL_ARTICLE = "detail_article"
    }
}

您需要将点击侦听器接口传递给适配器,例如:

typealias OnArticleClick = (article: Article) -> Unit

class ArticleAdapter(
    private val articleList: ArrayList<Article>
) :
    RecyclerView.Adapter<ArticleAdapter.MyViewHolder>() {
    var onArticleClick: OnArticleClick? = null
    ...
            binding.root.setOnClickListener {
                val article = Article(
                    data.title,
                    data.img,
                    data.content
                )
                onArticleClick?.invoke(article)
            }
    ...
}

并使用 RecyclerView 在您的主页片段中初始化 onArticleClick:

adapter.apply {
    onArticleClick = {
        // show details fragment
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM