如何解决如何从Recyclerview打开片段?
科特林 嗨,我想知道如何从recyclerview打开片段(例如,我要打开汽车项目cars_fragment,艺术品打开art_fragment ......)。
我将非常感谢您的帮助!谢谢!
这是我的适配器,我不添加clicklistner,因为运行代码时会出错
CategoriesAdapter
class CategoriesAdapter(var context: CategoriesFragment,var arrayList: ArrayList<CategoriesModel>) : RecyclerView.Adapter<CategoriesAdapter.ItemHolder>() {
override fun onCreateViewHolder(parent: ViewGroup,viewType: Int): ItemHolder {
val itemHolder = LayoutInflater.from(parent.context)
.inflate(R.layout.categorie_gridlayout,parent,false)
return ItemHolder(itemHolder)
}
override fun onBindViewHolder(holder: ItemHolder,position: Int) {
val categoriesModel: CategoriesModel = arrayList[position]
holder.images.setimageResource(categoriesModel.imagesGrid!!)
holder.titles.text = categoriesModel.textGrid
}
override fun getItemCount(): Int {
return arrayList.size
}
class ItemHolder (itemView : View) : RecyclerView.ViewHolder(itemView) {
var images = itemView.findViewById<ImageView>(R.id.categories_images)
var titles = itemView.findViewById<TextView>(R.id.categories_title)
}
}
这是我的Categories_fragment
Categories_fragment
class CategoriesFragment : Fragment() {
private var recyclerView : RecyclerView? = null
private var gridLayoutmanger : GridLayoutManager? = null
private var arrayList : ArrayList<CategoriesModel>? = null
private var categoriesAdapter : CategoriesAdapter? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
val rootView = inflater.inflate(R.layout.fragment_categories,container,false)
recyclerView = rootView.findViewById(R.id.categories_recycler) as RecyclerView
gridLayoutmanger = GridLayoutManager(context,2,linearlayoutmanager.VERTICAL,false)
recyclerView?.layoutManager = gridLayoutmanger
recyclerView?.setHasFixedSize(true)
arrayList = ArrayList()
arrayList = setDataInList()
categoriesAdapter = CategoriesAdapter(this,arrayList!!)
recyclerView?.adapter = categoriesAdapter
return rootView
}
private fun setDataInList() : ArrayList<CategoriesModel>{
val items : ArrayList<CategoriesModel> = ArrayList()
items.add(CategoriesModel(R.drawable.drawable_cars,"CARS"))
items.add(CategoriesModel(R.drawable.drawable_abstract,"ABSTRACT"))
items.add(CategoriesModel(R.drawable.drawable_city,"CITY"))
items.add(CategoriesModel(R.drawable.drawable_nature,"NATURE"))
items.add(CategoriesModel(R.drawable.drawable_3d,"3D"))
items.add(CategoriesModel(R.drawable.drawable_space,"SPACE"))
items.add(CategoriesModel(R.drawable.drawable_love,"lovE"))
items.add(CategoriesModel(R.drawable.drawable_minimalist,"MINIMLAIST"))
items.add(CategoriesModel(R.drawable.drawable_art,"ART"))
items.add(CategoriesModel(R.drawable.drawable_sport,"SPORT"))
items.add(CategoriesModel(R.drawable.drawable_anime,"ANIME"))
items.add(CategoriesModel(R.drawable.drawable_typography,"TYPOGRAPHY"))
items.add(CategoriesModel(R.drawable.drawable_music,"MUSIC"))
items.add(CategoriesModel(R.drawable.drawable_4k,"4K"))
return items
}
}
解决方法
使用侦听器回调片段并打开另一个片段
第一步:定义接口
interface CategoriesAdapterListener {
fun itemClick()
}
第二步:实现界面
class CategoriesFragment : Fragment(),CategoriesAdapterListener {
override fun itemClick() {
//open fragment
}
第3步:将其传递给适配器
//modify adapter constructor parameter
categoriesAdapter = CategoriesAdapter(this,this,arrayList!!)
//modify adapter constructor
class CategoriesAdapter(
var listener: CategoriesAdapterListener,var context: CategoriesFragment,var arrayList: ArrayList<CategoriesModel>)
第4步:单击viewHolder时回调
override fun onBindViewHolder(holder: ItemHolder,position: Int) {
val categoriesModel: CategoriesModel = arrayList[position]
holder.images.setImageResource(categoriesModel.imagesGrid!!)
holder.titles.text = categoriesModel.textGrid
holder.titles.setOnClickListener {
listener.itemClick()//callback
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。