Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Koltin:从内部类传递上下文_Android - Fatal编程技术网

Android Koltin:从内部类传递上下文

Android Koltin:从内部类传递上下文,android,Android,我想用foo方法敬酒。 我已经尝试了不同的访问方式(参见注释)。我做错了什么 这不起作用: class SettingsActivity : AppCompatActivity() { companion object{ fun foo(context : Context){ Toast.makeText(context, "Bar", Toast.LENGTH_LONG).show() } }

我想用foo方法敬酒。 我已经尝试了不同的访问方式(参见注释)。我做错了什么

这不起作用:

class SettingsActivity : AppCompatActivity() {
    companion object{
        fun foo(context : Context){
            Toast.makeText(context, "Bar", Toast.LENGTH_LONG).show()
        }
    }
    private fun createListener() {

        var listener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->   
                foo(this)
                //foo(this.applicationContext)
                //foo(this@SettingsActivity)
            }
    }
}
工作示例:

只有在传递字符串而不是上下文并用日志对象替换toast时,我才能调用Foo。在示例中,我使用
“foo(“ttt”)”
调用了foo:

日志中没有错误


已解决:在同伴对象中添加
lateinit var hi:SettingsActivity
,并在调用foo之前填充它。然后您可以省略上下文参数。

为此,您需要将上下文传递给同伴对象,在创建时的活动中,只需将上下文传递给同伴对象即可:

class SettingsActivity : AppCompatActivity() {
    companion object{
   var context:Context?=null
        fun foo(context){
            Toast.makeText(context, "Bar", Toast.LENGTH_LONG).show()
        }
    }
override fun onCreate(savedInstanceState: Bundle?) {
  context = this
}
    private fun createListener() {

        var listener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->   
                foo(this)
                //foo(this.applicationContext)
                //foo(this@SettingsActivity)
            }
    }

为此,您需要将上下文传递给同伴对象,在创建时的活动中,只需将上下文传递给同伴对象:

class SettingsActivity : AppCompatActivity() {
    companion object{
   var context:Context?=null
        fun foo(context){
            Toast.makeText(context, "Bar", Toast.LENGTH_LONG).show()
        }
    }
override fun onCreate(savedInstanceState: Bundle?) {
  context = this
}
    private fun createListener() {

        var listener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->   
                foo(this)
                //foo(this.applicationContext)
                //foo(this@SettingsActivity)
            }
    }
请尝试以下内容:

class SettingsActivity : AppCompatActivity() {
    companion object{
        fun foo(context : Context){
            Handler().post {
               Toast.makeText(context, "Bar", Toast.LENGTH_LONG).show()
            }
        }
    }
    private fun createListener() {

        var listener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->   
                foo(this@SettingsActivity)
            }
    }
}
请尝试以下内容:

class SettingsActivity : AppCompatActivity() {
    companion object{
        fun foo(context : Context){
            Handler().post {
               Toast.makeText(context, "Bar", Toast.LENGTH_LONG).show()
            }
        }
    }
    private fun createListener() {

        var listener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->   
                foo(this@SettingsActivity)
            }
    }
}

您的代码似乎是正确的,但请确保将侦听器注册到您的共享首选项

getSharedReferences(“MyPre”,Context.MODE\u PRIVATE)。RegisterOnSharedReferenceChangeListener(listener)

您还可以从中修改代码

class SettingsActivity : AppCompatActivity() {
companion object{
    fun foo(context : Context){
        Toast.makeText(context, "Bar", Toast.LENGTH_LONG).show()
    }
}
private fun createListener() {

    var listener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->   
            foo(this)
            //foo(this.applicationContext)
            //foo(this@SettingsActivity)
        }
}
}


您的代码似乎是正确的,但请确保将侦听器注册到您的共享首选项

getSharedReferences(“MyPre”,Context.MODE\u PRIVATE)。RegisterOnSharedReferenceChangeListener(listener)

您还可以从中修改代码

class SettingsActivity : AppCompatActivity() {
companion object{
    fun foo(context : Context){
        Toast.makeText(context, "Bar", Toast.LENGTH_LONG).show()
    }
}
private fun createListener() {

    var listener = SharedPreferences.OnSharedPreferenceChangeListener { sharedPreferences, key ->   
            foo(this)
            //foo(this.applicationContext)
            //foo(this@SettingsActivity)
        }
}
}

请确认一下(this@SettingsActivity)正在执行。请确保(this@SettingsActivity)正在执行。