直接問題:我為全域變數制作了一個functions.kt檔案,我做了:
import android.app.Application
class variable : Application() {
var currentLesson: String? = null
}
在我像這樣在 main.kt 中使用它之后:
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
button: Button = findViewById(R.id.button1)
var functions = variable()
var currentLesson = functions.currentLesson
button.onClickListener {
currentLesson = "text"
}
}
override fun onBackPressed(){
someview: View =
findViewById(R.id.view1)
var functions = variable()
var currentLesson = functions.currentLesson
if (currentLesson == "text"){
someview.visibility = View.VISIBLE
}
}
}
在onBackPressed()其始終為空。但不是在onCreate(). 哪里有問題?我是一個新的初學者嘗試學習。
我通過電話寫了那個問題,所以可能有錯誤的文本
uj5u.com熱心網友回復:
每次呼叫時,variable()您都在創建該類的一個新實體,variable因此它擁有自己的記憶體和所持有的狀態。
順便說一句,您不應該通過子類化Application來創建此類,因為您的簡單資料持有者不是應用程式!
如果您希望一個類為整個應用程式保存一些共享狀態,這通常稱為單例(只有一個實體的類),您可以在 Kotlin 中使用object代替class.
object Variable {
var currentLesson: String? = null
}
然后當你在你的 Activity 中使用它時,你可以直接呼叫它,Variable.currentLesson而不必創建類的實體。
或者,您可以將變數放在任何類之外,它將是一個可以從任何地方訪問的全域屬性。在我看來,這是一種丑陋的解決方案,因為它會污染命名空間。
請注意,您應該注意像這樣在全域變數中存盤的內容。將占用大量記憶體的大型物件放在全域變數中是不好的做法,因為這會導致該記憶體的使用時間超過必要的時間。
此外,約定類名總是以大寫字母開頭。這將使您的代碼更易于閱讀和理解,尤其是在 Kotlin 等省略new用于建構式呼叫的關鍵字的語言中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/379341.html
