【问题标题】:How to get a variable from another class in kotlin?如何从 kotlin 的另一个类中获取变量?
【发布时间】:2019-05-01 22:32:32
【问题描述】:

我想从一个活动中获取一个变量并在另一个类中使用它。 此变量将由用户在名为 editTextSerie 的 editText 中填充

 override fun searchSeries(listener: OnDataListener) {

        val retrofit = Retrofit.Builder().addConverterFactory(GsonConverterFactory.create())
            .baseUrl("http://api.themoviedb.org/3/")
            .build()

        val client = retrofit.create(MovieDBApiInterface::class.java)

        val objetoClasse1 = SearchActivity()

        var nomeS = objetoClasse1.editTextSerie.text.toString().trim()


        val responseCall = client.searchSeries("API_KEY", "pt-BR", nomeS)

        responseCall.enqueue(object : Callback<AllSeriesResponse> {
            override fun onResponse(call: Call<AllSeriesResponse>?, response1: Response<AllSeriesResponse>?) {
                listener.onSuccess(response1!!.body()!!.results)
            }

            override fun onFailure(call: Call<AllSeriesResponse>?, t: Throwable?) {
                listener.onFailure(t!!.message.toString())
            }
        })
    }

这个函数“searchSeries”来自“Series”类。

我想从另一个名为“Search Activity”的类中获取“editTextSerie”, 所以我创建了变量“nomeS”来接收它的值。

class SearchActivity : AppCompatActivity() {

    var botaoSearch: AppCompatImageButton? = null


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_search)



        botaoSearch = findViewById(R.id.btn_search)

        botaoSearch?.setOnClickListener {


          var nomeSerie = editTextSerie.text.toString().trim()


        }
    }
}

我想接收这个值(editTextSerie 的值来自 SearchActivity 的 XML)并在 responseCall 中通过“nomeS”变量使用它

【问题讨论】:

  • myClass.searchSeries(object: OnDataListener {?

标签: android class variables android-activity kotlin


【解决方案1】:

OnDataListener 是什么?不太确定是接口还是抽象类,所以我会写一些伪代码。

首先将你的函数searchSeries的参数改为

searchSeries(text: String, listener: OnDataListener)

所以在Series类中,你可以在你的函数searchSeries中获取数据:

    override fun searchSeries(text: String, listener: OnDataListener) {
    // ... 
    // you can get the "text" string
    }

然后编辑您的SearActivity 的监听器:

    class SearchActivity : AppCompatActivity() {

        var botaoSearch: AppCompatImageButton? = null

        // create class "Series"
        val series = Series()

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_search)

            botaoSearch = findViewById(R.id.btn_search)

            botaoSearch?.setOnClickListener {

                var nomeSeries = editTextSerie.text.toString().trim()
                searchSeries(nomeSeries)
            }
        }

        private fun searchSeries(text: String) {

            series.searchSeries(text, object : OnDataListener {

                override onSuccess(a0: ...) {

                }

                override onFailure(message: String) {

                }
            })

        }
    }

如果OnDataListener 是一个抽象类:

    series.searchSeries(text, object : OnDataListener() {

        override onSuccess(a0: ...) {

        }

        override onFailure(message: String) {

        }
    })

【讨论】:

    猜你喜欢
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多