【问题标题】:onActivityResult() not called when Activity started from FragmentActivity 从 Fragment 启动时未调用 onActivityResult()
【发布时间】:2012-02-08 23:58:41
【问题描述】:

我在 Android 中从相册导入图片时遇到问题,因为从未调用过 onActivityResult() 方法。

这是我编写的代码(从片段而不是活动中调用):

Intent galleryIntent = new Intent(Intent.ACTION_PICK,  android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
getActivity().startActivityForResult(galleryIntent, PICK_IMAGE);

顺便说一句,我已经定义了onActivityResult(),但它从未被触发:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(TAG, "onActivityResult"); // not printed
}

知道这有什么问题吗?

谢谢!

【问题讨论】:

  • 添加构造函数,super.onActivityResult(requestCode, resultCode, data);
  • 我已经编辑了问题,确实我的代码已经有那行了。
  • 您需要从图库中选择图片对吗?
  • Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null); intent.setType("图片/*"); intent.putExtra("return-data", true); startActivityForResult(intent, 1);

标签: android android-fragments


【解决方案1】:

要在片段中调用onActivityResult(),您应该调用片段版本的startActivityForResult(),而不是活动的版本。所以在你的片段代码中,替换

getActivity().startActivityForResult(galleryIntent, PICK_IMAGE);

startActivityForResult(galleryIntent, PICK_IMAGE);

【讨论】:

  • 在将活动转换为片段时很容易犯这个错误:-)
  • WOW 工作了 :) 很好,我们总是在片段中使用 getActivity() :) 帮了我很多
  • 这应该是正确的答案,在片段中调用方法的另一种方法是一种解决方法
  • 我花了一些时间试图弄清楚。感谢您的回答! :)
【解决方案2】:

使用此代码:

Intent galleryIntent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
getActivity().startActivityForResult(galleryIntent, PICK_IMAGE);

onActivityResult 必须在包含 Fragment 的 Activity 中。从那里你可以调用片段的任何方法,而不是在片段中。

MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.fragment);
myFragment .onCameraResult(requestCode, resultCode, intent);

随心所欲

【讨论】:

  • 不敢相信我以前没见过!谢谢:)
【解决方案3】:

试试这个片段:

    Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
    intent.setType("image/*");
    intent.putExtra("return-data", true);
    startActivityForResult(intent, 1);


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

        case 1:
            if(requestCode == 1 && data != null && data.getData() != null){
                Uri _uri = data.getData();

                if (_uri != null) {
                    Cursor cursor = getContentResolver().query(_uri, new String[] { android.provider.MediaStore.Images.ImageColumns.DATA }, null, null, null);
                    cursor.moveToFirst();
                    final String imageFilePath = cursor.getString(0);
                    File photos= new File(imageFilePath);
                    imageView.setImageBitmap(bitmap);
                    cursor.close();
                }
            }
            super.onActivityResult(requestCode, resultCode, data);
        }
    }   

【讨论】:

  • 你为什么叫“super.onActivityResult(requestCode, resultCode, data);”两次??!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-15
  • 2019-07-20
  • 2016-12-19
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
相关资源
最近更新 更多