应用程序从api获取电影数据并获取到片段的recyclerView。所以问题是我没有在 recyclerView 中获取数据。我看了一些 youtube 教程,但无法找到解决方案。
片段是
import android.os.Bundle
import android.util.Log
import android.util.Log.d
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.core.os.trace
import androidx.databinding.DataBindingUtil
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.example.movie_app.*
import com.example.movie_app.databinding.FragmentMovieBinding
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory
const val BASE_URL ="http://task.auditflo.in/"
class MovieFragment : Fragment() {
lateinit var binding: FragmentMovieBinding
lateinit var movieAdapter: MovieAdapter
// override fun onCreate(savedInstanceState: Bundle?) {
// super.onCreate(savedInstanceState)
// }
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
binding= FragmentMovieBinding.inflate(inflater,container,false)
binding.rv.setHasFixedSize(true)
binding.rv.layoutManager=LinearLayoutManager(requireContext())
getData()
return binding.root
}
private fun getData(){
val retrofitBuilder =Retrofit.Builder().baseUrl(BASE_URL).addConverterFactory(
GsonConverterFactory.create()).build().create(ApiInterface::class.java)
val retrofitData = retrofitBuilder.getData()
retrofitData.enqueue(object : Callback<List<ResponceDataClass>?> {
override fun onResponse(
call: Call<List<ResponceDataClass>?>,
response: Response<List<ResponceDataClass>?>
) {
val responseBody = response.body()!!
binding.rv.adapter=movieAdapter
movieAdapter= MovieAdapter(requireContext(), responseBody)
movieAdapter.notifyDataSetChanged()
}
override fun onFailure(call: Call<List<ResponceDataClass>?>, t: Throwable) {
d("MovieFragment", "onFaliure: "+t.message)
}
})
}
}
我也试过 binding.rv.adapter=movieAdapter 但它不工作 片段的适配器是
import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.TextView
import androidx.recyclerview.widget.RecyclerView
import com.example.movie_app.databinding.FragmentMovieBinding
import com.example.movie_app.databinding.MovieItemBinding
class MovieAdapter (private val context: Context, private val movieList:List<ResponceDataClass> ): RecyclerView.Adapter<MovieAdapter.ViewHolder>() {
class ViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
lateinit var binding: MovieItemBinding
var movie_title:TextView
var movie_release_year:TextView
var movie_runtime:TextView
var movie_cast:TextView
init{
movie_title=itemView.findViewById(R.id.movie_title)
movie_release_year=itemView.findViewById(R.id.movie_release_year)
movie_runtime=itemView.findViewById(R.id.movie_runtime)
movie_cast=itemView.findViewById(R.id.movie_cast)
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
var itemView = LayoutInflater.from(context).inflate(R.layout.movie_item,parent,false)
return ViewHolder(itemView)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.movie_title.text=movieList[position].Title
holder.movie_release_year.text=movieList[position].Year.toString()
holder.movie_runtime.text=movieList[position].Runtime.toString()
holder.movie_cast.text=movieList[position].Cast
}
override fun getItemCount(): Int {
return movieList.size
}
}```
And the error I am getting is
E/RecyclerView: No adapter attached; skipping layout
The app is running but no data is displaying on the recyclerView.
I think there is some mistake in the fragment or in adapter rest code is correct
I am unable to find the error kindly help me with this problem