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