Fragment onActivityResult 方法在执行时调用 Activity onActivityResult

2024-01-28

在我的片段中,我已启动 startActivityforresult 意图进行照片捕获。我已重写片段类中的 onActivityResult 回调方法。我已经在主活动中实现了 onActivityResult 回调以实现其他目的。我的问题是片段 onActivityResult 执行后调用活动 onActivityResult 方法并返回空指针异常。 Fragment onActivityResult 方法

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == Activity.RESULT_OK) 
    {
        prof_bitmap = null;
        if (requestCode == 0) 
        {
            Log.e("" ,"entered activity Result Code 0");
            Uri photoUri = data.getData();
            if (photoUri != null) 
            {
                String[] filePathColumn = { MediaStore.Images.Media.DATA };
                Cursor cursor = getActivity().getContentResolver().query(
                        photoUri, filePathColumn, null, null, null);
                cursor.moveToFirst();
                int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
                String filePath = cursor.getString(columnIndex);
                cursor.close();
                Log.e("" ,"File Path" +filePath);
                prof_bitmap = setImage(filePath);
            }
        }
        if (requestCode == 1) 
        {
            Log.e("" ,"entered activity Result Code 1");
            Bitmap bitmap = (Bitmap) data.getExtras().get("data"); 
            prof_bitmap = bitmap;
            Log.e("" ,"entered activity Result Code 1"+bitmap);
            profile_pic.setImageBitmap(bitmap);
        }
    }
}

活动结果上的活动

  @Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
    super.onActivityResult(requestCode, resultCode, data);
    Log.e("" ,"called onActivityResult in main");
    Session.getActiveSession().onActivityResult(this, requestCode,
            resultCode, data);
}

如何仅调用片段的onactivityresult方法?

我的日志猫

无法将结果 ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data dat=content://media/external/images/media/222 (has extras) }} 传递给 Activity {com.mobiotics.tvbuddydemo/com.mobiotics.tvbuddydemo.TVBuddyMainActivity}:java.lang.NullPointerException


如果您的 Activity 中定义了 onActivityResult,则无法跳过它并直接进入 Fragment。但是,如果活动不知道如何处理它,您可以将其重定向到片段。使用唯一的请求代码来区分谁处理结果。

public void onActivityResult(int requestCode, int resultCode, Intent data) 
{
    boolean processed = true;

    if (resultCode == Activity.RESULT_OK) 
    {
        if (requestCode == 0) {
            // Something
        } else if (requestCode == 1) {
            // Something
        } else {
            processed = false;
        }
    } else { // Error
        if (requestCode == 0) {
            // Handle error 
        } else {
            processed = false;
        }
    }

    if (!processed) {
        fragment1.onActivityResult(requestCode, resultCode, data);
        fragment2.onActivityResult(requestCode, resultCode, data);
        ...
        super.onActivityResult(requestCode, resultCode, data);
    }
}

注意:确保从片段中调用 getActivity().startActivityForResult() 而不是简单地使用 this.startActivityForResult()

public void something(Intent intent) {
    getActivity().startActivityForResult(intent);
    // or if you are using SherlockActionBar/Support package
    getSupportActivity().startActivityForResult(intent);
}

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Fragment onActivityResult 方法在执行时调用 Activity onActivityResult 的相关文章

随机推荐