0

I accessed a function that returns array for my RecyclerView. How do i load the array async? I load the function as such:

var content = ContentList().list(navBarTitle) 

ContentList class:

class ContentList { fun list(title : String):Array<Array<Int>> { var contentTitle : Array<Array<Int>> if (title == "Hijaiyyah Letters") contentTitle = arrayOf( arrayOf(R.drawable.ic_intro1_1, R.raw.ahem_x), arrayOf(R.drawable.ic_intro1_2, R.raw.bad_disk_x), arrayOf(R.drawable.ic_intro1_3, R.raw.baseball_hit), arrayOf(R.drawable.ic_intro1_4, R.raw.bloop_x), arrayOf(R.drawable.ic_intro1_5, R.raw.blurp_x), arrayOf(R.drawable.ic_intro1_6, R.raw.blurp_x), arrayOf(R.drawable.ic_intro1_7, R.raw.ahem_x), arrayOf(R.drawable.ic_intro1_8, R.raw.bad_disk_x), arrayOf(R.drawable.ic_intro1_9, R.raw.baseball_hit), arrayOf(R.drawable.ic_intro1_10, R.raw.bloop_x), arrayOf(R.drawable.ic_intro1_11, R.raw.ahem_x), arrayOf(R.drawable.ic_intro1_12, R.raw.bad_disk_x), arrayOf(R.drawable.ic_intro1_13, R.raw.baseball_hit), arrayOf(R.drawable.ic_intro1_14, R.raw.bloop_x), arrayOf(R.drawable.ic_intro1_15, R.raw.blurp_x), arrayOf(R.drawable.ic_intro1_16, R.raw.ahem_x), arrayOf(R.drawable.ic_intro1_17, R.raw.bad_disk_x), arrayOf(R.drawable.ic_intro1_18, R.raw.baseball_hit), arrayOf(R.drawable.ic_intro1_19, R.raw.bloop_x), arrayOf(R.drawable.ic_intro1_20, R.raw.blurp_x), arrayOf(R.drawable.ic_intro1_21, R.raw.bloop_x), arrayOf(R.drawable.ic_intro1_22, R.raw.ahem_x), arrayOf(R.drawable.ic_intro1_23, R.raw.bad_disk_x), arrayOf(R.drawable.ic_intro1_24, R.raw.baseball_hit), arrayOf(R.drawable.ic_intro1_25, R.raw.bloop_x), arrayOf(R.drawable.ic_intro1_26, R.raw.blurp_x), arrayOf(R.drawable.ic_intro1_27, R.raw.ahem_x), arrayOf(R.drawable.ic_intro1_28, R.raw.bad_disk_x), arrayOf(R.drawable.ic_intro1_29, R.raw.baseball_hit), arrayOf(R.drawable.ic_intro1_30, R.raw.bloop_x), arrayOf(R.drawable.ic_intro1_31, R.raw.blurp_x) ) else if(title == "Fat-hah Vowel 1") contentTitle = arrayOf( arrayOf(R.drawable.ic_fathah1_1, R.raw.ahem_x), arrayOf(R.drawable.ic_fathah1_2, R.raw.bad_disk_x), arrayOf(R.drawable.ic_fathah1_3, R.raw.baseball_hit), arrayOf(R.drawable.ic_fathah1_4, R.raw.bloop_x), arrayOf(R.drawable.ic_fathah1_5, R.raw.blurp_x) ) else contentTitle = arrayOf( arrayOf(R.drawable.ic_tbr, R.raw.ahem_x), arrayOf(R.drawable.ic_tbr, R.raw.bad_disk_x), arrayOf(R.drawable.ic_tbr, R.raw.baseball_hit), arrayOf(R.drawable.ic_tbr, R.raw.bloop_x), arrayOf(R.drawable.ic_tbr, R.raw.blurp_x) ) return contentTitle } } 

I still have lots more to populate the array but already the app is lagging so i i am thinking of async approach. I googled for Kotlin async methods but saw its about creating new function for it? Any pointers/advise is very much appreciated. Millions of thanx in advance...

1

1 Answer 1

1

You can use Kotlin coroutine. You can try below code

CoroutineScope(Dispatchers.Main).launch { val content = async(Dispatchers.IO) { ContentList().list(navBarTitle) } // result will have returned value of `list()` function var result = content.await() } } 

As, we are accessing list() from coroutine, it needs to be suspend function

suspend fun list(title : String): Array<Array<Int>> { } 
Sign up to request clarification or add additional context in comments.

1 Comment

Getting error from the IDE Expecting member declaration to my preceding line: recyclerView_main.adapter = SecondAdapter(content)... Any idea?

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.