Как связать recycleview с asyncTask?
Нужно чтобы карточки людей выводились через какое-то время с помощью Async Есть PersonHolder:
val personsList = mutableListOf<Person>()
private val namePerson = arrayOf(
"Хаяо Миядзаки",
"Норман Ридус",
"Билли Джо",
"Оливер Сайкс",
"Маргарет Тэтчер",
"Генри Форд",
"Фредди Меркьюри",
"Фил Найт",
"Леонардо ди Каприо",
"Lana Del Rey"
)
private val sexPerson = arrayOf(
"мужчина",
"мужчина",
"мужчина",
"мужчина",
"женщина",
"мужчина",
"мужчина",
"мужчина",
"мужчина",
"женщина"
)
private val datePerson = arrayOf(
"1941 - н.в.",
"1969 - н.в.",
"1972 - н.в.",
"1986 - н.в.",
"1925 - 2013",
"1863 - 1947",
"1946 - 1991",
"1938 - н.в.",
"1974 - н.в.",
"1985 - н.в.",
)
private val infoPerson = arrayOf(
"Всемирно знаменитый японский аниматор, режиссер и сценарист. Обладатель «Оскарa» за фильм («Унесенные призраками»). ",
"Американский актёр и фотомодель, известный по своим ролям в сериале «Ходячие мертвецы», игре Death Stranding.",
"Американский музыкант, певец, автор песен и актёр, наиболее известный как лид-вокалист и гитарист панк-рок группы Green Day. ",
"Музыкант, лид-вокалист рок-группы Bring Me the Horizon. Также он создал фирму одежды Drop Dead Clothing. ",
"Премьер-министр Великобритании в 1979-1990 годах, лидер Консервативной партии в 1975-1990 годах, баронесса с 1992 года.",
"Американский промышленник, владелец заводов по производству автомобилей по всему миру, изобретатель. ",
"Британский певец парсийского происхождения, автор песен и вокалист рок-группы Queen. Меркьюри в детстве филателистом.",
"Американский бизнесмен, один из основателей компании Nike. Выпускник Орегонского университета и Стэнфордской школы бизнеса.",
"Американский актёр и продюсер. Лауреат премии «Оскар», трёхкратный лауреат премии «Золотой глобус», «Серебряного медведя».",
"Американская певица, автор песен и поэтесса. Её музыка была отмечена критиками за кинематографический стиль, меланхолией."
)
private val photo = arrayOf(
R.drawable.miadzaki,
R.drawable.norman,
R.drawable.billi,
R.drawable.oliver,
R.drawable.tet,
R.drawable.ford,
R.drawable.freddi,
R.drawable.fil,
R.drawable.leonardo,
R.drawable.lana
)
fun createCollectionPerson(): ArrayList<Person>{
val persons: ArrayList<Person> = ArrayList<Person>()
for (i in 0..9){
val person = Person(
namePerson[i],
sexPerson[i],
datePerson[i],
infoPerson[i],
photo[i]
)
persons.add(person)
}
return persons
}
}
data class Person(
val name: String,
val sex: String,
val date: String,
val info: String,
@DrawableRes val photoPerson: Int
)
И есть AsyncFragment :
class AsyncFragment : Fragment(), TaskCallbacks {
private var myAsync: MyAsyncTask? = null
private var handler: Handler? = null
private var callbacks: TaskCallbacks? = null
private lateinit var binding: AsyncFragmentBinding
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View {
binding = AsyncFragmentBinding.inflate(inflater, container, false)
return binding.root
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
retainInstance = true
callbacks = this
startTask()
}
private val verticalLinearLayoutManager: LinearLayoutManager =
LinearLayoutManager(activity, RecyclerView.VERTICAL, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupRecycleView()
}
private fun setupRecycleView(){
binding.cardPerson.layoutManager = verticalLinearLayoutManager
binding.cardPerson.adapter = PersonAdapter(PersonHolder.createCollectionPerson(), ::showSnackbar, ::showSnackbarLike)
}
private fun showSnackbar(person: Person): Unit{
Snackbar.make(binding.root, "Нажата карточка: " + person.name, 3000).show()
}
private fun showSnackbarLike(person: Person): Unit{
Snackbar.make(binding.root, "Нажат лайк: " + person.name, 3000).show()
}
@SuppressLint("StaticFieldLeak")
inner class MyAsyncTask : AsyncTask<Unit, Int, Unit>() {
override fun onPreExecute() {
callbacks?.onPreExecuted()
}
override fun doInBackground(vararg params: Unit?) {
Log.d("Started", "I'm Started")
for (i in 1..PersonHolder.personsList.count()) {
TimeUnit.SECONDS.sleep(1)
isCancelled && break
}
}
override fun onPostExecute(result: Unit?) {
callbacks?.let {
for (i in 1..100) {
handler?.sendEmptyMessageDelayed(
i,
((i - 1) * 2000).toLong()
)
}
}
}
}
private fun startTask() {
myAsync = MyAsyncTask()
}
override fun onPreExecuted() {
Log.d("cancel", "executed")
}
override fun onCancelled() {
Log.d("cancel", "cancel")
}
@SuppressLint("NotifyDataSetChanged")
override fun onPostExecute() {
TODO("Not yet implemented")
}
companion object {
const val MyTag = "FRAGMENT_ASYNC"
}
}
Как это сделать?