点击ImageButton切换图片后,返回Activity时如何保存该状态?
方法一:利用Activity状态保存机制(临时保存)
这种方式适合处理Activity因系统回收、屏幕旋转等场景重建时的状态恢复,但用户主动退出Activity后再进入,状态会丢失。
修改代码如下:
class suspect : AppCompatActivity() { private val KEY_IMAGE_STATE = "image_state" private var isImageSwitched = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_suspect) // 记得初始化ImageButton,替换成你的实际id val imagebutton = findViewById<ImageButton>(R.id.imagebutton) // 恢复之前保存的状态 savedInstanceState?.let { isImageSwitched = it.getBoolean(KEY_IMAGE_STATE, false) if (isImageSwitched) { imagebutton.setImageResource(R.drawable.picture2) } } imagebutton.setOnClickListener { isImageSwitched = true imagebutton.setImageResource(R.drawable.picture2) } } // 在Activity被销毁前保存状态 override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putBoolean(KEY_IMAGE_STATE, isImageSwitched) } }
方法二:持久化保存(长期保留状态)
如果需要退出APP后再次打开仍保留切换后的图片,用SharedPreferences存储状态:
class suspect : AppCompatActivity() { private val PREF_NAME = "ImageStatePrefs" private val KEY_IMAGE_SWITCHED = "is_image_switched" private var isImageSwitched = false override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_suspect) val imagebutton = findViewById<ImageButton>(R.id.imagebutton) // 从本地读取保存的状态 val prefs = getSharedPreferences(PREF_NAME, MODE_PRIVATE) isImageSwitched = prefs.getBoolean(KEY_IMAGE_SWITCHED, false) if (isImageSwitched) { imagebutton.setImageResource(R.drawable.picture2) } imagebutton.setOnClickListener { isImageSwitched = true imagebutton.setImageResource(R.drawable.picture2) // 把状态写入本地存储 prefs.edit().putBoolean(KEY_IMAGE_SWITCHED, isImageSwitched).apply() } } }
注意事项
- 必须确保
imagebutton通过findViewById或视图绑定完成初始化,原代码中缺少这一步,记得补充。 - 若使用视图绑定,需在模块的
build.gradle中启用相关配置。
内容的提问来源于stack exchange,提问作者dimitrios mayrogiannis
相关产品推荐
相关产品推荐

