0

I try to do this, but in Kotlin. I have done that:

class MainActivity : AppCompatActivity() {

    lateinit var adapter: NewsRecViewAdapter
    var newsItems: ArrayList<NewsItem> = ArrayList()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        adapter = NewsRecViewAdapter(newsItems)
        DownloadNews().execute()
    }

    class DownloadNews: AsyncTask<Void, Void, Void>() {
        override fun onPostExecute(result: Void?) {
            adapter
            super.onPostExecute(result)
        }

        override fun doInBackground(vararg params: Void?): Void {}
    }
}

DownloadNews class can't inheritance adapter from MainActivity class. I'd rather not use inner. How can I fix it?

Vemu
  • 322
  • 1
  • 5
  • 13

1 Answers1

0

Mark the class as inner

inner class DownloadNews: AsyncTask<Void, Void, Void>() {
    override fun onPostExecute(result: Void?) {
        adapter
        super.onPostExecute(result)
    }

    override fun doInBackground(vararg params: Void?): Void {}
}

According official documentation

A nested class marked as inner can access the members of its outer class. Inner classes carry a reference to an object of an outer class

Md. Asaduzzaman
  • 14,963
  • 2
  • 34
  • 46
  • Yeah, but then Android Studio says `This AsyncTask class should be static or leaks might occur` – Vemu Dec 29 '19 at 19:24
  • Why not you use separate class for `AsyncTask` or you have to keep it static. Check this: https://stackoverflow.com/a/44309450/2637449 – Md. Asaduzzaman Dec 29 '19 at 19:32