使用 Kotlin 将片段上的 itemClickCallBack RecyclerView 转到 DetailActiviy
itemClickCallBack RecyclerView on fragment to DetailActiviy with Kotlin
我尝试在我的适配器中制作 itemClickCallback 并尝试在我的片段中实现它。我的问题是单击卡片时 DetailActivity 无法显示。
CardViewMovieAdapter
class CardViewMovieAdapter(private val listMovie: ArrayList<Movie>) : RecyclerView.Adapter<CardViewMovieAdapter.CardViewViewHolder>() {
.................
*intent*
itemView.setOnClickListener {
val intent = Intent( context, DetailMovieActivity::class.java)
intent.putExtra(DetailMovieActivity.EXTRA_MOVIE, movie)
startActivity(context,intent,Bundle())
}
...............................
interface OnItemClickCallback {
fun onItemClicked(data: Movie)
}
}
电影片段
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
........
*the itmeclikcallback*
cardViewMovieAdapter.setOnItemClickCallback(object : CardViewMovieAdapter.OnItemClickCallback{
override fun onItemClicked(data: Movie) {
showSelectedHero(data)
...............
fun showSelectedHero(movie: Movie) {
val intent = Intent( context, DetailMovieActivity::class.java)
intent.putExtra(DetailMovieActivity.EXTRA_MOVIE, movie)
startActivity(intent)
DetailMovieActivity
class DetailMovieActivity : AppCompatActivity() {
companion object{
const val EXTRA_MOVIE = "extra_movie"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail)
*get data intent*
val moviesData = intent.getParcelableArrayExtra(EXTRA_MOVIE) as Movie
val imgPhotoMovie: ImageView = img_item_photo
val tvMovieNane : TextView = tv_item_name
val tvMovieDescription : TextView = tv_item_description
val tvMovieDetail: TextView = tv_item_description2
tvMovieNane.setText(moviesData.name)
tvMovieDescription.setText(moviesData.description)
tvMovieDetail.setText(moviesData.detail)
Glide.with(this)
.load(moviesData.photo)
.into(imgPhotoMovie)
}
}
如何修复此意图以显示带有数据的 detailActivity?
Activityclass中没有startActivity (context, intent, Bundle())
等带参数的方法,有ex这样的方法。 startActivity(intent, new Bundle());
.
您不能从视图中调用 startActivity,您应该通过上下文或 activity 调用它,例如 context.startActivity(...)
或 activity.startActivity(...)
您可以在视图中执行此操作,例如:
val intent = Intent(view.context, YourActivity::class.java)
view?.context?.startActivity(intent, new Bundle())
所以只需要更换
startActivity (context, intent, Bundle())
有
context.startActivity(intent)
我尝试在我的适配器中制作 itemClickCallback 并尝试在我的片段中实现它。我的问题是单击卡片时 DetailActivity 无法显示。
CardViewMovieAdapter
class CardViewMovieAdapter(private val listMovie: ArrayList<Movie>) : RecyclerView.Adapter<CardViewMovieAdapter.CardViewViewHolder>() {
.................
*intent*
itemView.setOnClickListener {
val intent = Intent( context, DetailMovieActivity::class.java)
intent.putExtra(DetailMovieActivity.EXTRA_MOVIE, movie)
startActivity(context,intent,Bundle())
}
...............................
interface OnItemClickCallback {
fun onItemClicked(data: Movie)
}
}
电影片段
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
........
*the itmeclikcallback*
cardViewMovieAdapter.setOnItemClickCallback(object : CardViewMovieAdapter.OnItemClickCallback{
override fun onItemClicked(data: Movie) {
showSelectedHero(data)
...............
fun showSelectedHero(movie: Movie) {
val intent = Intent( context, DetailMovieActivity::class.java)
intent.putExtra(DetailMovieActivity.EXTRA_MOVIE, movie)
startActivity(intent)
DetailMovieActivity
class DetailMovieActivity : AppCompatActivity() {
companion object{
const val EXTRA_MOVIE = "extra_movie"
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_detail)
*get data intent*
val moviesData = intent.getParcelableArrayExtra(EXTRA_MOVIE) as Movie
val imgPhotoMovie: ImageView = img_item_photo
val tvMovieNane : TextView = tv_item_name
val tvMovieDescription : TextView = tv_item_description
val tvMovieDetail: TextView = tv_item_description2
tvMovieNane.setText(moviesData.name)
tvMovieDescription.setText(moviesData.description)
tvMovieDetail.setText(moviesData.detail)
Glide.with(this)
.load(moviesData.photo)
.into(imgPhotoMovie)
}
}
如何修复此意图以显示带有数据的 detailActivity?
Activityclass中没有
startActivity (context, intent, Bundle())
等带参数的方法,有ex这样的方法。startActivity(intent, new Bundle());
.您不能从视图中调用 startActivity,您应该通过上下文或 activity 调用它,例如
context.startActivity(...)
或activity.startActivity(...)
您可以在视图中执行此操作,例如:val intent = Intent(view.context, YourActivity::class.java) view?.context?.startActivity(intent, new Bundle())
所以只需要更换
startActivity (context, intent, Bundle())
有
context.startActivity(intent)