0

用户可以在 imageView 按钮上显示他们的照片。代码如下。

问题是,由于 imageView 上的照片是在onActivityResult函数中获取的,所以 savedInstanceState返回null 。

因此,如果用户单击btnRegistration并再次返回此应用程序,他们会丢失 imageView 上的照片。你能帮忙吗,如何编辑这些代码来解决这个问题

private var iv_crop: ImageView = null
public var tmpResultUri: Uri?=null

public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
            val cimg = CropImage.getActivityResult(data)
            iv_crop.setImageURI(cimg.uri)
            val resultUri = cimg.uri
             tmpResultUri = resultUri 
 }}

 @RequiresApi(Build.VERSION_CODES.O)
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)


        if (savedInstanceState != null) {  
                var strResultUri: String?= null
                strResultUri = savedInstanceState.getString(strResultUri)  

               // var drawable: BitmapDrawable = iv_crop.getDrawable() as BitmapDrawable
               //var bitmapImgCropped = drawable.getBitmap()
        }
        else {
            iv_crop.setOnClickListener {
                CropImage.activity().start(this)  // <== Starts a new activity here. 
            }                          

        }

       btnRegistration?.setOnClickListener {
                val intent = Intent()
                intent.setClassName( "com.mylab.myApp","com.mylab.myApp.MainActivity")
                startActivity(intent)   // <== Starts a new activity here.
                finish()}
}

override fun onSaveInstanceState(outState:Bundle ) {
        outState.run{
            outState.putString(tmpResultUri.toString(), tmpResultUri.toString())
        }
        super.onSaveInstanceState(outState)
}

    override fun onRestoreInstanceState(savedInstanceState: Bundle?) {
        super.onRestoreInstanceState(savedInstanceState!!)    
        savedInstanceState.run {
            val strtmpResultUri = getString(tmpResultUri.toString())
        }
    }
4

1 回答 1

0

您需要使用静态键存储图像 URI。像这样的东西。

companion object { 
    private const val ARG_IMAGE_URI = "imageuri"
}

然后当你保存和检索你的 URI 时,使用这个值作为你的键而不是 uri。

override fun onSaveInstanceState(outState:Bundle ) {
    outState.putString(ARG_IMAGE_URI, tmpResultUri.toString())
    super.onSaveInstanceState(outState)
}

override fun onCreate(savedInstanceState: Bundle?) {
   super.onCreate(savedInstanceState)


   if (savedInstanceState != null) {  
       val strResultUri: String?= savedInstanceState.getString(ARG_IMAGE_URI)
   }

}
于 2020-03-05T11:33:37.493 回答