#android #kotlin #android-recyclerview
Вопрос:
Этот мой класс адаптера, который пытается раздуть представление переработчика с помощью video_View и списка массивов, в конечном итоге получает значение 0. Я перепробовал множество методов, чтобы заставить его работать, но каждый раз он каждый раз не раздувает обзор вторсырья.
Класс адаптера:
class Video_adapter(var videolist: ArrayList<String>):RecyclerView.Adapter<Video_adapter.ViewHolder>(){
class ViewHolder(view: CardView):RecyclerView.ViewHolder(view){
val video:VideoView = view.findViewById(R.id.video)
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.video_view,parent,false) as CardView
Log.i("OnCreateView","OnCreateViewHolder is working")
return ViewHolder(view)
}
override fun getItemCount(): Int {
return videolist.size
Log.i("Video_list1",videolist.size.toString())
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
var video = videolist[position]
holder.video.setVideoURI(video.toUri())
holder.video.setOnTouchListener( View.OnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_DOWN){
holder.video.start()
}
true
})
}
}
Это мой основной файл kotlin
class MainActivity : AppCompatActivity() {
lateinit var toolbar: androidx.appcompat.widget.Toolbar
lateinit var recyclerView: RecyclerView
lateinit var layoutManager: RecyclerView.LayoutManager
lateinit var recycleradpter:Video_adapter
lateinit var videolist: ArrayList<String>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
toolbar = findViewById(R.id.toolbar)
recyclerView = findViewById(R.id.recycler_view)
layoutManager = LinearLayoutManager(this)
recyclerView.layoutManager = layoutManager
videolist = ArrayList()
getJson()
Log.i("Video_list",videolist.size.toString())
recycleradpter = Video_adapter(videolist)
Log.i("Video_list",videolist.size.toString())
recyclerView.adapter = recycleradpter
}
fun getJson(){
val url = "https://raw.githubusercontent.com/bikashthapa01/myvideos-android-app/master/data.json"
val queue = Volley.newRequestQueue(this)
//volley request
val request = JsonObjectRequest(Request.Method.GET,url,null,Response.Listener<JSONObject>{ response ->
try {
val categories = response.getJSONArray("categories")
for (i in 0 until categories.length()){
val category = categories.getJSONObject(i)
val videos = category.getJSONArray("videos")
for (i in 0 until videos.length()){
val video = videos.getJSONObject(i)
val source = video.getString("sources")
videolist.add(source)
Log.i("Url",source)
Toast.makeText(this,"Json request working",Toast.LENGTH_LONG).show()
}
}
}
catch (e:JSONException){
Log.i("error ",e.toString())
}
},Response.ErrorListener {error ->
Log.i("JSon_request_error",error.toString())
})
Log.i("Video_list",videolist.size.toString())
queue.add(request)
}
}
Я не могу найти, что не так с кодом, почему он не раздувает представление переработчика.
Ответ №1:
После цикла for в вызове метода recycleradpter.notifyDataSetChanged()
getJSON, чтобы обновить RecyclerView.
Комментарии:
1. @SUPERADI вы получаете какие-либо ошибки? вызовите getJSON() в onCreate после установки
recyclerView.adapter = recycleradpter
. Журнал ` Log.i(«Video_list»,videolist.size.toString ()) » вернет ноль, поскольку запрос на залп является асинхронным.2. Попробовал и этот тоже, ничего не вышло.
3. Это ссылка на репозиторий проекта. Если бы вы могли мне помочь
4. Ссылка недоступна. это частное репо?
5. Я опубликовал репо, теперь вы можете его проверить.