简体   繁体   English

片段onActivityResult方法执行调用活动onActivityResult

[英]Fragment onActivityResult method on executing calls activity onActivityResult

In my fragment I have started startActivityforresult intent for photo capture.I have overridden onActivityResult callback method in fragment class. 在我的片段中,我已经启动了startActivityforresult意图进行照片捕获。我已经在片段类中重写了onActivityResult回调方法。 I have implemented onActivityResult callback in main activity for some other intent. 我已经在主要活动中实现了onActivityResult回调以实现其他一些意图。 My problem is fragment onActivityResult after execution calls activities onActivityResult method and returns null pointer exception. 在执行调用活动onActivityResult方法并返回空指针异常后,我的问题是片段onActivityResult。 Fragment onactivityresult method 片段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);
        }
    }
}

Activity onActivityResult 活动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);
}

how to call only fragment onactivityresult method? 如何只调用片段onactivityresult方法?

MY Logcat 我的Logcat

Failure delivering result ResultInfo{who=null, request=1, result=-1, data=Intent { act=inline-data dat=content://media/external/images/media/222 (has extras) }} to activity {com.mobiotics.tvbuddydemo/com.mobiotics.tvbuddydemo.TVBuddyMainActivity}: java.lang.NullPointerException 将结果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

If you have onActivityResult defined in your Activity, you can't skip it and go directly to the Fragment. 如果您在Activity中定义了onActivityResult,则不能跳过它并直接转到Fragment。 You can however redirect it to the Fragment if the Activity does not know how to handle it. 但是,如果Activity不知道如何处理它,您可以将其重定向到Fragment。 Use unique requestCodes to differentiate between who handles the result. 使用唯一的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);
    }
}

Note: Make sure to call getActivity().startActivityForResult() from your fragment and not simply using this.startActivityForResult() 注意:确保从片段中调用getActivity()。startActivityForResult()而不是简单地使用this.startActivityForResult()

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

Hope this helps. 希望这可以帮助。

Try remove the line super.onActivityResult(requestCode, resultCode, data); 尝试删除行super.onActivityResult(requestCode, resultCode, data); in your fragment onActivityResult() . 在您的片段onActivityResult()

当您使用startActivityForResult启动的Activity调用finish()时,将调用public void onActivityResult

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

I aslo face this problem. 我也面临这个问题。

Calling of an activity from fragment 从片段调用活动

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

here "context" from FragmentActivity. 这里来自FragmentActivity的“上下文”。 Now the result comes in FargmentActivity onActivityResult method. 现在结果出现在FargmentActivity onActivityResult方法中。 to switch this result you have to declare a static variable of fragment class in fragmetn activity class. 要切换此结果,您必须在fragmetn活动类中声明片段类的静态变量。

static ActivityUploadPhotos activityUploadPhotos;

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

if(activityUploadPhotos!=null)
{
           activityUploadPhotos.onActivityResult(requestCode, resultCode, data);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 向后调用和onActivityResult()不在Fragment中调用,但在活动中调用 - Backward calls and onActivityResult() not calling in Fragment but calls in activity onActivityResult 从 Activity 到 Fragment - onActivityResult from Activity to Fragment 有没有办法调用 onActivityResult() 方法从 Fragment 中的 Activity 返回数据? - Is there any way to call onActivityResult() method to return data from Activity in Fragment? 无法访问片段中的onActivityResult()方法 - cannot access onActivityResult() method in fragment 在 onActivityResult 中调用方法而不是活动 - Calling a method instead of activity in onActivityResult Activity 在 onActivityResult 方法上变为 null - Activity becomes null on onActivityResult method 片段的onActivityResult - onActivityResult For Fragment Facebook callbackManager 方法 onActivityResult 未在 Fragment onActivityResult 方法中调用 - Facebook callbackManager method onActivityResult not calling in Fragment onActivityResult method 当我调用 startResolutionForResult 时,onActivityResult() 没有在片段中执行 - onActivityResult() not executing in fragment when i call startResolutionForResult 在Activity和Fragment中都不调用onActivityResult - onActivityResult is not called, neither in Activity nor in Fragment
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM