【问题标题】:Trying to build a program that enables users to select image from gallery but when I run and choose the image the image doesn't appear in the app尝试构建一个程序,使用户能够从图库中选择图像,但是当我运行并选择图像时,图像不会出现在应用程序中
【发布时间】:2021-04-30 15:32:14
【问题描述】:

尝试构建一个程序,使用户能够从图库中选择图像,但是当我运行并选择图像时,图像不会出现在应用程序中

我一直在尝试解决这个问题,但我发现代码没有问题。

XML 布局:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20sp"
    tools:context=".MainActivity">


    <ImageView
        android:id="@+id/significant"
        android:layout_width="270dp"
        android:layout_height="480dp"
        android:scaleType="centerCrop"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.5"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintEnd_toEndOf="@+id/significant"
        app:layout_constraintStart_toStartOf="@+id/significant"
        app:layout_constraintTop_toBottomOf="@+id/significant" />


</androidx.constraintlayout.widget.ConstraintLayout>

Kotlin 类

package com.example.projectc

import android.app.Activity
import android.content.Intent
import android.media.Image
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        button.setOnClickListener {
            Intent(Intent.ACTION_GET_CONTENT).also {
                it.type = "image/*"
                startActivityForResult(it, 0)
            }
        }
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (requestCode == Activity.RESULT_OK && resultCode == 0) {
            val uri = data?.data
            significant.setImageURI(uri)

        }
    }
}

【问题讨论】:

    标签: android kotlin


    【解决方案1】:
    if (requestCode == Activity.RESULT_OK && resultCode == 0)
    

    requestCode 是您传递给startActivityForResult() 的参数。试试:

    if (requestCode == 0 && resultCode == Activity.RESULT_OK)
    

    最后,希望切换到ActivityResultContracts.GetContentActivityResultsContracts.OpenDocument API,而不是直接使用ACTION_GET_CONTENT

    【讨论】:

      【解决方案2】:

      根据documentation,您可以通过这些步骤轻松地从图库中挑选图像

      1- 在你的活动中声明这个变量

      val getContent = registerForActivityResult(GetContent()) { uri: Uri? ->
         uri?.apply{
            // put the selected image in your ImageView
            significant.setImageURI(this)
         }
      }
      

      2- 当用户点击按钮时,只需调用此行

      getContent.launch("image/*")
      

      【讨论】:

      • 非常感谢。
      猜你喜欢
      • 1970-01-01
      • 2021-12-25
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多