无法从回收器视图适配器调用底表



我正在做电影应用程序,所以我使用回收器视图列出所有电影列表,我需要在底部页面对话框中显示电影的详细信息。当用户点击电影列表时,底部页面会崩溃应用程序。请帮我这里有什么错误我发布了我的代码这是我的代码,带有嵌套的回收器视图和底部页面,请帮助我这是可回收适配器


class ListMoviesAdapter(
private val movies: MutableList<Item>,
) :
RecyclerView.Adapter<ViewHolder>() {

inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
var contentImage: ImageView? = itemView.findViewById(R.id.contentImage)
var contentTitle: TextView? = itemView.findViewById(R.id.contentTitle)
var contentSubTitle1: TextView? = itemView.findViewById(R.id.contentSubtitle1)
}

interface onItemClickListener {
fun onItemCLick(position: Int)
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
val view = inflater.inflate(R.layout.item_6, parent, false)
return ViewHolder(view)
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {

val MoviesData: Item = movies.get(position)

holder.contentImage?.let {
Glide.with(it)
.load(MoviesData.media.thumbnail)
.fitCenter()
.into(holder.contentImage!!)
}
holder.contentImage?.setOnClickListener {
val moviesFragment = MoviesFragment()
val bottomsheet = DetailsFragment()
bottomsheet.show(moviesFragment.requireActivity().supportFragmentManager,"Bottomsheet")
Toast.makeText(holder.itemView.context, MoviesData.text.title, Toast.LENGTH_LONG).show()
}
holder.contentTitle?.text = MoviesData.text.title
holder.contentSubTitle1?.text = MoviesData.text.subtitle1
}

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

这是底部页面


override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

}

//    override fun onAttach(context: Context) {
//        adapter = ImageSliderAdapter(context)
//        super.onAttach(context)
//    }

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {

return inflater.inflate(R.layout.fragment_movies, container, false)
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val imageslider = view.findViewById<SliderView>(R.id.image_slider)
val slider: MutableList<Item> = mutableListOf()
adapter = ImageSliderAdapter(requireContext())
movie_recycle = view.findViewById(R.id.movie_recycle)
imageslider.setSliderAdapter(adapter)
partner_recycle = view.findViewById(R.id.partnets_scroll)

imageslider.setIndicatorAnimation(IndicatorAnimationType.WORM) //set indicator animation by using SliderLayout.IndicatorAnimations. :WORM or THIN_WORM or COLOR or DROP or FILL or NONE or SCALE or SCALE_DOWN or SLIDE and SWAP!!

imageslider.setSliderTransformAnimation(SliderAnimations.SIMPLETRANSFORMATION)
imageslider.autoCycleDirection = SliderView.AUTO_CYCLE_DIRECTION_BACK_AND_FORTH
imageslider.scrollTimeInSec = 3
imageslider.isAutoCycle = true
imageslider.startAutoCycle()
setupView()
getMovieList()
adapter.addImageslider(slider)
super.onViewCreated(view, savedInstanceState)
}

fun addmovielist(movies: MutableList<Item>) {
adapter.addImageslider(movies)
}

private fun getMovieList() {
val apicall = Retrofit.Builder()
.addConverterFactory(GsonConverterFactory.create())
.baseUrl(BASE_URL)
.build()
.create(Api::class.java)

val moviedata = apicall.GetMovieList()

moviedata.enqueue(object : Callback<ImageSLider> {

override fun onResponse(call: Call<ImageSLider>, response: Response<ImageSLider>) {
val responeBody = response.body()!!
val page = responeBody.page.body.rows[0].items
addmovielist(page)
partner_list(responeBody.page.body.rows[1].items)
val size = responeBody.page.body.rows.size - 1

for (data in 3..size) {
list_movies.add(responeBody.page.body.rows[data])
}

movies_list(list_movies)
}

override fun onFailure(call: Call<ImageSLider>, t: Throwable) {
Toast.makeText(requireActivity(), t.toString(), Toast.LENGTH_LONG).show()
}
})
}

@SuppressLint("NotifyDataSetChanged")
fun partner_list(part_list: MutableList<Item>) {
all_partner.addAll(part_list)
partner_adapter = PartnerAdapter(all_partner)
partner_recycle.adapter?.notifyDataSetChanged()
}

@SuppressLint("NotifyDataSetChanged")
fun movies_list(movie_lst: MutableList<Rows>) {
all_movies.addAll(movie_lst)
ContentAdapter(all_movies)
movie_recycle.adapter?.notifyDataSetChanged()
}

fun setupView() {
partner_recycle.adapter = PartnerAdapter(all_partner)
partner_recycle.layoutManager =
LinearLayoutManager(requireContext(), LinearLayoutManager.HORIZONTAL, false)
movie_recycle.adapter = ContentAdapter(all_movies)
movie_recycle.layoutManager =
LinearLayoutManager(requireContext(), LinearLayoutManager.VERTICAL, false)
}

}

这是嵌套回收视图


class ContentAdapter(val item: MutableList<Rows>) :
RecyclerView.Adapter<ContentAdapter.ContentAdapterVH>() {

var itemlist: MutableList<Item> = mutableListOf()

class ContentAdapterVH(itemView: View?) : RecyclerView.ViewHolder(itemView!!) {
val recycleMovie: RecyclerView? = itemView?.findViewById(R.id.movie_scroll)
val categoryText: TextView? = itemView?.findViewById(R.id.title_movie_txt)
val dashboardScreen = DashboardScreen()
val moviesFragment = MoviesFragment()
fun bind(data: Rows) {

recycleMovie?.apply {
recycleMovie.adapter = ListMoviesAdapter(data.items, moviesFragment)
layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
}
}
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContentAdapterVH {
val inflater = LayoutInflater.from(parent.context)
val view = inflater.inflate(R.layout.item_6_list, parent, false)
return ContentAdapterVH(view)
}

override fun onBindViewHolder(holder: ContentAdapterVH, position: Int) {
val contentData: Rows = item.get(position)

holder.categoryText?.text = contentData.text.title
holder.bind(contentData)
}

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

请帮助解决这个问题或提供任何链接来引用这个谢谢

只需创建一个对象类,为底部工作表创建一个方法,并将上下文传递给该方法。在适配器中,单击项目或要显示底部工作表的位置时调用此方法简单的方法是,您必须在适配器中的onBindViewHolder方法上设置click监听器,然后直接调用这个showBottomSheet方法。并将所需的数据传递给它,以便在底部页面中显示

object BottomSheetUtils {
fun showBottomSheet(
context:Context
) {
val bottomSheetDialog = BottomSheetDialog(context)
bottomSheetDialog.setContentView(R.layout.your_custom_bottom_sheet_layout)

// Just update UI and set click listeners etc...
bottomSheetDialog.textviewName.text = "Example"
bottomSheetDialog.show()
}
}


override fun onBindViewHolder(holder: ViewHolder, position: Int) {

val MoviesData: Item = movies.get(position)

holder.contentImage?.let {
Glide.with(it)
.load(MoviesData.media.thumbnail)
.fitCenter()
.into(holder.contentImage!!)
}
holder.contentImage?.setOnClickListener {
val moviesFragment = MoviesFragment()
val bottomsheet = DetailsFragment()
bottomsheet.show(appcompActivity.supportFragmentManager,"Bottomsheet")
Toast.makeText(holder.itemView.context, MoviesData.text.title, Toast.LENGTH_LONG).show()
}
holder.contentTitle?.text = MoviesData.text.title
holder.contentSubTitle1?.text = MoviesData.text.subtitle1
}

我将appcompactivity传递给底部适配器,并使用支持碎片管理器触发底部表单,谢谢大家

最新更新