[英]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.