Android Fragments 如何从图片库中获取图片?

um6iljoc  于 2023-03-03  发布在  Android
关注(0)|答案(2)|浏览(150)

我想做一个片段,它的功能就像我按下一个按钮,然后画廊就会打开,我选择一个图像,这个图像就会放进我的图像视图。
我写代码,

public class GreenFragment extends Fragment {
    ImageView mImageview;
    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_green, container, false);
        mImageview = (ImageView) view.findViewById(R.id.iv_beforesendpost);

        view.findViewById(R.id.btn_getgallery).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                int permissionCheck = ContextCompat.checkSelfPermission(getActivity(),
                        Manifest.permission.READ_EXTERNAL_STORAGE);

                if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
                    startGallery();
                } else {
                    ActivityCompat.requestPermissions(getActivity(),
                            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                            2000);
                }
            }
        });
        return view;
    }

    private void startGallery() {
        Intent cameraIntent = new Intent(Intent.ACTION_GET_CONTENT);
        cameraIntent.setType("image/*");
        if (cameraIntent.resolveActivity(getActivity().getPackageManager()) != null) {
            startActivityForResult(cameraIntent, 1000);
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == 1000 && resultCode == Activity.RESULT_OK) {

        }
        Uri returnUri;
        returnUri = data.getData();

        Glide.with(this)
                .load(returnUri)
                .override(1280, 1280)
                .centerCrop()
                .crossFade()
                .into(mImageview);

但是当我点击Button (btn_gatgallery)时,什么也没有发生。
我哪里错了?请告诉我。

lp0sw83n

lp0sw83n1#

view.findViewById(R.id.btn_getgallery).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(ActivityCompat.checkSelfPermission(getActivity(),
                        Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) 
                {
                    requestPermissions(
                            new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                            2000);
                } 
                else {
                    startGallery();
                }
            }
        });
        return view;
    }

Intent cameraIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

处理请求

@Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
    //super method removed
    if(resultCode == RESULT_OK) {
    if(requestCode == 1000){
         Uri returnUri = data.getData();
         Bitmap bitmapImage = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), returnUri);
         your_imageView.setImageBitmap(bitmapImage);
    }
    }
    //Uri returnUri;
    //returnUri = data.getData();
6za6bjd0

6za6bjd02#

首先创建以下内容:

private val takePictureFromGalleryResult = 
  registerForActivityResult(ActivityResultContracts.StartActivityForResult(){
        if (it.resultCode == RESULT_OK) {
            binding.imageView.setImageURI(it.data?.data)
            user.image = it.data?.data!!
        }
    }

然后使用此行

private fun takePictureFromGallery() {
        val intent = Intent(Intent.ACTION_PICK)
        intent.apply {
            type = "image/*"
            action = Intent.ACTION_GET_CONTENT
        }
        takePictureFromGalleryResult.launch(intent)
    }

相关问题