`
class MoviesFragment : Fragment() {
private var viewModel: MoviesViewModel? = null
private var adapter = MoviesAdapter()
private lateinit var binding : FragmentMoviesBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentMoviesBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
recyclerViewInit()
viewModelInit()
}
private fun recyclerViewInit() {
val recyclerView = binding.recyclerView
recyclerView.adapter = adapter
recycler_view.layoutManager = LinearLayoutManager(requireContext())
}
private fun viewModelInit() {
viewModel = ViewModelProvider(this)[MoviesViewModel::class.java]
viewModel!!.getPageOfMovies()
viewModel!!.myResponse.observe(viewLifecycleOwner) { response ->
if (response.isSuccessful) {
response.body()?.let { movies ->
adapter.setData(movies) }
} else {
Toast.makeText(requireContext(), response.code(), Toast.LENGTH_SHORT).show()
}
}
}
}
`
`
class MoviesViewModel(application: Application) : AndroidViewModel(application) {
private val repository = MoviesRepository()
val myResponse: MutableLiveData<Response<MovieResponse>> = MutableLiveData()
fun getPageOfMovies() {
viewModelScope.launch {
val response = repository.getPageOfMovies()
myResponse.value = response
}
}
}
`
`
class MoviesAdapter : RecyclerView.Adapter<MoviesAdapter.ViewHolder>() {
private var moviesList = MovieResponse(0, emptyList(), 0, 0)
inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(
LayoutInflater.from(parent.context).inflate(
R.layout.movies_recyclerview_item, parent, false
)
)
}
override fun getItemCount(): Int = moviesList.results.size
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
Glide.with(holder.itemView.context)
.load(Uri.parse("$BASE_URI_FOR_IMAGES${moviesList.results[position].posterPath}"))
.centerCrop()
.into(holder.itemView.poster_imageview)
holder.itemView.title.text = moviesList.results[position].title
holder.itemView.overview.text = moviesList.results[position].overview
holder.itemView.release_date.text = moviesList.results[position].releaseDate
}
@SuppressLint("NotifyDataSetChanged")
fun setData(movies: MovieResponse) {
moviesList = movies
notifyDataSetChanged()
}
companion object{
const val BASE_URI_FOR_IMAGES = "https://www.themoviedb.org/t/p/w220_and_h330_face/"
}
}
`
`
class MoviesRepository {
suspend fun getPageOfMovies(): Response<MovieResponse> {
return MoviesClient.api.getFirstPageOfPopularMovies()
}
}
`
當螢屏在 RecyclerView 中旋轉時,資料再次加載到新的頂部,即串列在串列的頂部。可能是什么問題呢?也就是說,我可以滾動并查看我的資料,但在后臺我會看到我的舊串列。
我試圖找到我重新創建 RecyclerView 的位置,但顯然一切都應該作業。
uj5u.com熱心網友回復:
默認情況下,螢屏旋轉和其他配置更改會重新創建您的活動。重新創建的活動將恢復其片段。您應該只在活動重新開始且未重新創建時重新添加片段,即savedInstanceState捆綁包為空。否則,您將在已恢復的片段之上添加一個新片段。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/523752.html
標籤:爪哇安卓科特林android-recyclerview
上一篇:如何在mapOf中使用索引
