6

在我的片段中,我已经开始了用于照片捕获的 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);
        }
    }
}

活动 onActivityResult

  @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) }} 传递给活动失败{com.mobiotics.tvbuddydemo/com.mobiotics.tvbuddydemo.TVBuddyMainActivity}:java.lang.NullPointerException

4

5 回答 5

9

如果你的Activity中定义了onActivityResult,你不能跳过它直接进入Fragment。但是,如果 Activity 不知道如何处理它,您可以将其重定向到 Fragment。使用唯一的 requestCodes 来区分谁处理结果。

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);
}

希望这可以帮助。

于 2013-05-08T07:22:00.203 回答
1

尝试删除super.onActivityResult(requestCode, resultCode, data);片段中的行onActivityResult()

于 2013-05-08T07:07:53.593 回答
1

public void onActivityResultActivity您开始时startActivityForResult调用完成调用finish()

于 2013-05-08T07:08:10.590 回答
0

Activity 中的 onActivityResult 将首先被调用,您不应删除 Activity 中的结果处理,而是通过检查 requestCode 来执行您想要的操作。

于 2013-05-08T07:20:36.637 回答
0

我也面临这个问题。

从片段调用活动

((Activity)context).startActivityForResult(photoPickerIntent, 100);

这里是来自 FragmentActivity 的“上下文”。现在结果来自 FargmentActivity onActivityResult 方法。要切换此结果,您必须在 fragmetn 活动类中声明片段类的静态变量。

static ActivityUploadPhotos activityUploadPhotos;

...
ActivityUploadPhotos f = new ActivityUploadPhotos();
ActivityHome.activityUploadPhotos=f;
......

if(activityUploadPhotos!=null)
{
           activityUploadPhotos.onActivityResult(requestCode, resultCode, data);
}
于 2013-10-16T06:08:46.727 回答