簡體   English   中英

使用 ViewModel 更改片段時,將 Bitmap 保留在 ImageView 中

[英]Keep Bitmap in ImageView when Change Fragment with ViewModel

我有兩個片段,我在它們之間捆綁了 bitmap。

FragmentA ,我 select Image From GalleryCamera並將其設置在 ImageView 為Bitmap

當我導航到HomeFragmrnt並獲取它並在HomeFragBitmap中再次設置為 Bitmap 時,我將捆綁該bitmap

問題:當我將FragmentA留給FragmentB並再次返回到SettingFrag時,我丟失了ImageView 當我離開FragmentB時,我又失去了圖像!

我知道它是用於Fragment Lifecycle的,我嘗試使用savedInstance但不起作用!

我有FragmentAFragmentBViewModel 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM