[英]Android-Keep image in ImageView on a fragment when change fragment
[英]Keep Bitmap in ImageView when Change Fragment with ViewModel
我有两个片段,我在它们之间捆绑了 bitmap。
在FragmentA ,我 select Image From Gallery和Camera并将其设置在 ImageView 为Bitmap
当我导航到HomeFragmrnt并获取它并在HomeFrag的Bitmap
中再次设置为 Bitmap 时,我将捆绑该bitmap
!
问题:当我将FragmentA留给FragmentB并再次返回到SettingFrag时,我丢失了ImageView
! 当我离开FragmentB时,我又失去了图像!
我知道它是用于Fragment Lifecycle
的,我尝试使用savedInstance
但不起作用!
我有FragmentA和FragmentB的ViewModel
class 吗? 我该如何处理我的问题?!
如果你想要任何代码,我会发布它!
谢谢
您可以使用 ViewModel 在片段之间共享任何数据。
在您的情况下,通过以下方式在 ViewModel 中创建一个变量:
var mBitmap: Bitmap? = null
然后当您获得 bitmap 时,将 bitmap 分配给片段中的上述变量
bitmap = BitmapFactory.decodeFile(mPhotoFile!!.absolutePath)
mViewModel.mBitmap = bitmap
在此之后,无论您想在哪里使用此 bitmap,只需调用以下代码:
mViewModel.mBitmap
例如,像这样:
imageView.setImageBitmap(mViewModel.mBitmap)
希望这会有所帮助,如果您需要任何东西,请告诉我
更新:
就像Ajeeli提到的在初始化 ViewModel 时传递活动实例
ViewModelProvider(activity, viewModelFactory).get(SettingViewModel::class.java)
您的问题可能是您仅在应将 ViewModel 范围限定为活动生命周期时才将其范围限定为片段。
改变这个:
ViewModelProvider(this, viewModelFactory)
至:
ViewModelProvider(requireActivity(), viewModelFactory)
我解决了问题 tnx @parag Pawar
我使用SharedPrefrences
! 只是它!
我将图像文件放在SharedPrefrences
中并在另一个片段中获取它! 图像已保存,一切都很好!
lateinit var preferences: SharedPreferences
lateinit var editor: SharedPreferences.Editor
companion object {
const val PREF: String = "PREF_KEY"
const val IMG_KEY: String = "IMG_PATH"
}
preferences = activity!!.getSharedPreferences(PREF, Context.MODE_PRIVATE)
editor = preferences.edit()
editor.putString(IMG_KEY, data.data.toString())
editor.apply()
//这里你得到值
val sharedPreference: SharedPreferences = activity!!.getSharedPreferences(
PREF, Context.MODE_PRIVATE
)
if (sharedPreference.contains(IMG_KEY)) {
imgPath = sharedPreference.getString(
IMG_KEY,
null
).toString()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.