我有两个片段。在一个片段上,我有回收器视图。我使用reflect从API获取新闻,并在cardview的recycler视图上设置新闻。现在,我想当用户将点击一张卡片,整个新闻将显示在一个新的片段。这里是第一个片段类,我有回收器视图
package com.sumita.newsappusingfragment
import android.os.Bundle
import android.util.Log
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.LinearLayoutManager
import kotlinx.android.synthetic.main.fragment_recycle.*
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
class Recycle : Fragment() {
lateinit var adapter: NewsAdapter
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view : View= inflater.inflate(R.layout.fragment_recycle, container, false)
getNews()
return view
}
private fun getNews() {
val news : Call<News> = NewsSeversis.newsIntence.getHeadlines("in",1)
//retrofit use a queue and store all the request on that queue and process one by one.when one
// request processed it its callback and then process another
news.enqueue(object : Callback<News> {
override fun onResponse(call: Call<News>, response: Response<News>) {
//here response is a News response
val news:News?=response.body()
if (news!=null){
Log.d("response",news.toString())
adapter= NewsAdapter(news.articles)
newsList.adapter=adapter
newsList.layoutManager= LinearLayoutManager(requireContext())
}
}
override fun onFailure(call: Call<News>, t: Throwable) {
Log.d("response","error occur",t)
}
})
}
}
下面是该回收器视图的适配器
package com.sumita.newsappusingfragment
import android.content.Context
import android.content.Intent
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.Adapter
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.item_layout.view.*
class NewsAdapter (val artical: List<Artical>):RecyclerView.Adapter<NewsAdapter.articalViewHolder>(){
inner class articalViewHolder(itemView: View):RecyclerView.ViewHolder(itemView)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): articalViewHolder {
val view:View=LayoutInflater.from(parent.context).inflate(R.layout.item_layout,parent,false)
return articalViewHolder(view)
}
override fun onBindViewHolder(holder: articalViewHolder, position: Int) {
val articals:Artical=artical[position]
holder.itemView.apply {
newsTitle.text=articals.title
newsDescription.text=articals.description
Glide.with(context).load(articals.urlToImage).into(newsImage)
holder.itemView.setOnClickListener {
}
}
}
override fun getItemCount(): Int {
return artical.size
}
}
现在我想把那个新闻的url传递到点击的项目上。如何实现onClickListener
1条答案
按热度按时间iih3973s1#
虽然下面的答案可以工作,但使用Android的内置ViewModel被认为是更好的做法。ViewModel可以在Fragments之间共享:https://developer.android.com/guide/fragments/communicate。
如果你仍然想坚持你的代码,我会:
1.为适配器添加click监听器:
1.当用户点击文章时调用它:
1.在您的Recycle Fragment中,向Adapter传递一个click listener:
1.处理单击时,create your new Fragment and use the bundle attributes to pass the article data:
再次建议从视图类(Fragments、Activities...)中删除任何业务逻辑,并使用better architecture for your application