gpt4 book ai didi

java - 单击事件后,RecyclerView跳到顶部

转载 作者:行者123 更新时间:2023-12-02 08:57:47 24 4
gpt4 key购买 nike

我已经有很长时间了,在类似的帖子上尝试了不同的建议,但都被证明是徒劳的。

目前,我有一个实现了点赞双击的recyclerview。每当我这样做时,recyclerview就会跳到页面顶部。

请告知如何做才能阻止这种情况。



    private fun setDataIntoAdapter(list: List<MovieEntity?>?) {


movieAdapter = MovieAdapter(list, object : MovieAdapter.OnMovieListener {
override fun onMovieDoubleClick(movieEntity: MovieEntity, view: View) {

val fav = view.findViewById<ImageView>(R.id.redFav)
// var favMovie = convertToFavourityEntity(movieEntity)


movieEntity.favourite = true
if (fav.visibility == View.GONE) {
fav.visibility = View.VISIBLE


CoroutineScope(Main).launch {

try {
insertAndUpdate(movieEntity)
FancyToast.makeText(
context,
"${movieEntity.title} is added to favourite",
FancyToast.LENGTH_LONG,
FancyToast.SUCCESS,
true
).show()
} catch (e: Exception) {

FancyToast.makeText(
context,
"Movie has been previously added \nto favorite",
FancyToast.LENGTH_LONG,
FancyToast.ERROR,
true
).show()

}


}


} else {
fav.visibility = View.GONE
movieEntity.favourite = false
CoroutineScope(Main).launch {

try {

deleteAndUpdate(movieEntity)
FancyToast.makeText(
context,
"${movieEntity.title} is removed from favourite",
FancyToast.LENGTH_LONG,
FancyToast.INFO,
true
).show()
} catch (e: Exception) {

// Toast.makeText(context, "Movie has been previously removed \nto favorite", Toast.LENGTH_SHORT).show()
val snackbar = Snackbar
.make(
view, "Movie has been previously removed \n" +
"to favorite", Snackbar.LENGTH_LONG
)
snackbar.show()
}


}
}

}

override fun onSingleClick(movieEntity: MovieEntity, view: View) {


gotoDetails(movieEntity)

// view.deleteIcon.setOnClickListener {
// singleDeletion(movieEntity)
// }

}

})
}

private suspend fun insertAndUpdate(movieEntity: MovieEntity) {
ServiceLocator.createLocalDataSource(context!!).movieDao?.update(movieEntity)

}



适配器

class MovieAdapter<T>(private var movies:List<T?>?, private var listener:OnMovieListener):RecyclerView.Adapter<MovieAdapter.MovieHolder>()  {


override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MovieHolder {
val itemView = LayoutInflater.from(parent.context).inflate(R.layout.movie_recycler_items, parent, false)
return MovieAdapter.MovieHolder(itemView)
}

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

fun setMovie(movies: List<T?>?){
this.movies = movies
notifyDataSetChanged()
}
fun getMovieAt(position: Int):T?{
return movies?.get(position)
}
override fun onBindViewHolder(holder: MovieHolder, position: Int) {
// covert.drawCornerFlag(holder)
movies?.let{
val currentMovies = it[position]
holder.bind(it[position]!!, listener)
}
}

class MovieHolder(itemView: View): RecyclerView.ViewHolder(itemView) {


var title = itemView.findViewById<TextView>(R.id.title)
var releaseDate = itemView.findViewById<TextView>(R.id.releaseDate)
var ratingBar = itemView.findViewById<RatingBar>(R.id.ratingBar)
var imageThmbnail = itemView.findViewById<ImageView>(R.id.thumbnail)
var fav = itemView.findViewById<ImageView>(R.id.favourite)
var redFav = itemView.findViewById<ImageView>(R.id.redFav)
var rating = itemView.findViewById<TextView>(R.id.rating)

fun <T> bind(movieEntity: T, listener: OnMovieListener){

var i = 0


if(movieEntity is MovieEntity){
if(movieEntity.favourite){
redFav.visibility = View.VISIBLE
}
else{
redFav.visibility = View.GONE
}
val calendar = Calendar.getInstance()
val dateReleased = movieEntity.releaseDate?.split("-")
val year = dateReleased?.get(0)?.toInt()
val month = dateReleased?.get(1)?.toInt()
val day = dateReleased?.get(2)?.toInt()
var newDate:Date?= null
if (year != null) {
if (month != null) {
if (day != null) {
calendar.set(year, month,day)
}

}
newDate = calendar.time
}

val displayDate = newDate.toString().substring(4..7) + year.toString()
title.setText(movieEntity.title)
releaseDate.setText(displayDate)
ratingBar.numStars = 5
val ratingNum = movieEntity.rating?.toFloat()?.div(2)
rating.setText("${ratingNum!!}")
ratingBar.rating = ratingNum
Picasso.get().load(movieEntity.movieImage).into(imageThmbnail)
itemView.setOnClickListener(DoubleClick(object :DoubleClickListener{
override fun onDoubleClick(view: View?) {

Log.i("Dob", "Double clicked")

listener.onMovieDoubleClick(movieEntity, itemView)
}

override fun onSingleClick(view: View?) {
Log.i("click", "Single click")
listener.onSingleClick(movieEntity, itemView)
}

}))

}

}

}

interface OnMovieListener{
fun onMovieDoubleClick(movieEntity: MovieEntity, view:View)
fun onSingleClick(movieEntity: MovieEntity, view: View)
}


}

最佳答案

您可以通过以下示例移至起始位置:



LinearLayoutManager layoutManager = (LinearLayoutManager) 
mRecyclerView.getLayoutManager();
layoutManager.scrollToPositionWithOffset(0, 0);

关于java - 单击事件后,RecyclerView跳到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60380247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com