如何仅在Kotlin中运行一次代码?

问题描述

我对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对象,以确保首选项值保持一致状态并控制何时将它们提交存储。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...