问题描述
我对Kotlin有基本的了解。我正在开发一个小型应用程序。由于我在应用程序中的多个函数中都需要一个变量,因此我只是在该类下创建了一个变量,并为该变量提供了默认值。但是,此变量仅在首次打开应用程序时才起作用。有代码可以执行此操作吗?
class Main : Fragment() {
var numara = 0 //the variable I am talking about
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_main,container,false)
}
override fun onViewCreated(view: View,savedInstanceState: Bundle?) {
super.onViewCreated(view,savedInstanceState)
zikirCek.text = "${numara}"
zikirCek.setOnClickListener {
zikir(it)
}
sifirlaButton.setOnClickListener {
sifirla(it)
}
kaydetButton.setOnClickListener {
kaydetme(it)
}
kayitYukle.setOnClickListener {
kayityukle(it)
}
try {
arguments?.let {
//numara = mainArgs.fromBundle(it).numara.toInt()
var secilenId = MainArgs.fromBundle(it).id
context?.let {
val db = it.openOrCreateDatabase("Zikirler",Context.MODE_PRIVATE,null)
val cursor = db.rawQuery(
"SELECT * FROM zikirler WHERE id = ?",arrayOf(secilenId.toString())
)
val zikirr = cursor.getColumnIndex("zikir")
while (cursor.moveToNext()) {
zikirCek.setText(cursor.getString(zikirr))
}
cursor.close()
}
}
} catch (e: Exception){
e.printStackTrace()
}
}
这些也是我提到的功能
fun zikir(view: View){
numara = numara + 1
zikirCek.text = "${numara}"
}
fun sifirla(view: View){
numara = 0
zikirCek.text = "${numara}"
}
fun kaydetme(view: View){
val action = MainDirections.actionMainToKaydet(numara)
Navigation.findNavController(view).navigate(action)
}
fun kayityukle(view: View){
val actionn = MainDirections.actionMainToKayityukleme()
Navigation.findNavController(view).navigate(actionn)
}
}
解决方法
您可以使用SharedPreferences in Android
存储变量:
// Prepare a SharedPreference Object.
val sharedPreferences = getSharedPreferences("preferences",Context.MODE_PRIVATE)
// To save the variable
sharedPreferences.edit().putInt("numara",numara).apply()
// To retrieve the variable
val numara = sharedPreferences.getInt("numara",0)
为了更好地理解答案,我建议您阅读this:
用于访问和修改Context#getSharedPreferences返回的首选项数据的接口。对于任何特定的首选项集,所有客户端都共享一个此类的单个实例。对首选项的修改必须通过Editor对象,以确保首选项值保持一致状态并控制何时将它们提交存储。