android如何导入活动,关于android:如何将活动值传递给另一个活动(Kotlin)

我是Kotlin的新手,我正在尝试为我的应用进行设置活动,我希望该活动将其价值传递给其他活动。 我尝试了不同的代码,但没有一个起作用,我尝试制作一个共享的首选项文件,但我不知道如何编写代码

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

我的主要活动

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

val prefEditor = preferences.edit()

val fonts = arrayOf("Data1","Data2","Data3","Data4")

val adapterCountry = ArrayAdapter(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")

}

}

}

}

我在这里找到了这个问题的解决方案

在此处输入链接说明

尝试将此回答改写为Kotlin。

如果只是从那个活动到另一个活动而已链接在一起,则可以考虑仅传递一个意图。 否则,如果您确实需要在应用程序范围内使用首选项是个好方法:developer.android.com/training/data-storage/shared-preferences

因此,基本上您想将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(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(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)。

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)

}

}

我不建议使用共享首选项在屏幕之间传递事件,因为如果您的应用在崩溃之前无法清理,就可能陷入尴尬的状态,从而无法清除其共享的偏好状态。

它说上下文没有分类器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值