【问题标题】:How to pass activity values to another activity (Kotlin)如何将活动值传递给另一个活动(Kotlin)
【发布时间】:2018-08-26 21:48:22
【问题描述】:

我是 Kotlin 的新学习者,我正在尝试为我的应用程序创建一个设置活动,我希望这个活动将它的值传递给其他活动。我尝试了不同的代码,但它们都不起作用,我尝试制作一个共享首选项文件,但我不知道如何编写代码

要清楚,我想将字体类型从设置 [main] 活动传递到另一个活动,但我不知道如何!

我的主要活动

val preferences = applicationContext.getSharedPreferences("MyPrefs", Context.MODE_PRIVATE)
    val prefEditor = preferences.edit()

    val fonts = arrayOf("Data1", "Data2", "Data3", "Data4")
    val adapterCountry = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, fonts)
    val spinner = findViewById(R.id.spinner) as Spinner
    spinner.adapter = adapterCountry
    spinner.setSelection(preferences.getInt("position", 0))

    spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {

        override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
            spinner.setSelection(position)
            prefEditor.putInt("position", position)
            prefEditor.apply()
            val selecteditem = parent.getItemAtPosition(position).toString()
            if (selecteditem == "Data1"){

            }
        }

        override fun onNothingSelected(parent: AdapterView<*>) {
        }
    }

这是我的主要 2 活动:

class Main2Activity : AppCompatActivity() {

internal lateinit var sh : SharedPreferences
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main2)

    sh = PreferenceManager.getDefaultSharedPreferences(this)





}

override fun onStart() {
    super.onStart()
    if (sh.getBoolean("positon", false)){
        when(sh.getInt("position", 0)){
           0->{
               t1.typeface = Typeface.createFromAsset(assets, "andlso.ttf")
           }
            1->{
                t1.typeface = Typeface.createFromAsset(assets, "frsspbl")
            }
        }
    }


}

我在这里找到了这个问题的解决方案 enter link description here

【问题讨论】:

标签: android android-layout kotlin


【解决方案1】:

所以基本上你想将Int 中的数据(字体类型)从一个活动传递到另一个活动。您可以使用SharedPrefenrences,但不建议在 Android 中使用。

我给你2个解决方案:

1.使用捆绑

MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val fonts = arrayOf("Data1", "Data2", "Data3", "Data4")
        val adapterCountry = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, fonts)
        val spinner = findViewById(R.id.spinner) as Spinner
        spinner.adapter = adapterCountry

        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {

            override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
                spinner.setSelection(position)
                val selecteditem = parent.getItemAtPosition(position).toString()
                if (selecteditem == "Data1") {

                }

                // Start another activity with position
                val intent = Intent(this@MainActivity, Main2Activity::class.java)
                intent.putExtra("position", position);
                startActivity(intent)
            }

            override fun onNothingSelected(parent: AdapterView<*>) {
            }
        }
    }
}

Main2Activity.kt

class Main2Activity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val position = intent.getIntExtra("position", 0)
    }
}

2。使用 SharedPreferences

MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val preferences = PreferenceManager.getDefaultSharedPreferences(this)

        val fonts = arrayOf("Data1", "Data2", "Data3", "Data4")
        val adapterCountry = ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, fonts)
        val spinner = findViewById(R.id.spinner) as Spinner
        spinner.adapter = adapterCountry
        spinner.setSelection(preferences.getInt("position", 0))

        spinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {

            override fun onItemSelected(parent: AdapterView<*>, view: View, position: Int, id: Long) {
                spinner.setSelection(position)
                val selecteditem = parent.getItemAtPosition(position).toString()
                if (selecteditem == "Data1"){

                }

                // Save position to prefs.
                preferences.edit()
                        .putInt("position", position)
                        .apply()
            }

            override fun onNothingSelected(parent: AdapterView<*>) {
            }
        }
    }
}

Main2Activity.kt

class Main2Activity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Get position from prefs.
        val position = PreferenceManager.getDefaultSharedPreferences(this).getInt("position", 0)
    }
}

【讨论】:

  • 你能告诉我你如何在其他屏幕上获取数据吗?在您的情况下,只需使用 intent.getIntExtra("position", 0)intent.getIntExtra("position1", 0)
【解决方案2】:

Intent 已经存在将信息从一个活动发送到另一个活动的功能。

// in your first activity:

val intent = Intent(context, Main2Activity::class.java)
               .putExtra("position", position)
startActivity(intent)

// in your second activity, you can fetch the extras like this:

class Main2Activity : AppCompatActivity() {

  override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      val position = intent.getIntExtra("position", -1)

  }
}

我不建议使用共享首选项在屏幕之间传递事件因为如果您的应用在清理共享首选项状态之前崩溃,您可能会陷入尴尬的状态

【讨论】:

  • 表示上下文没有分类器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多