Java OnActivityResult在片段内不起作用。如何在我的代码中修复此问题?
因此,我正在编写这个应用程序,它需要从手机中拾取个人资料图片,裁剪、压缩并将图片保存到内存中的自定义位置,还需要将压缩后的位图设置为圆形图像视图中的预览。所有这些都在一个碎片里。但是我的onActivityResult在片段中根本没有被调用 这是我的密码: ViewPagerAdapter.class 配置碎片2.类 和MainActivity.classJava OnActivityResult在片段内不起作用。如何在我的代码中修复此问题?,java,android,onactivityresult,Java,Android,Onactivityresult,因此,我正在编写这个应用程序,它需要从手机中拾取个人资料图片,裁剪、压缩并将图片保存到内存中的自定义位置,还需要将压缩后的位图设置为圆形图像视图中的预览。所有这些都在一个碎片里。但是我的onActivityResult在片段中根本没有被调用 这是我的密码: ViewPagerAdapter.class 配置碎片2.类 和MainActivity.class onActivityResult代码在正常的活动中完美地工作,但在这个片段中却没有。我该如何解决我的问题?谢谢大家! 我认为问题在于: f
onActivityResult代码在正常的活动中完美地工作,但在这个片段中却没有。我该如何解决我的问题?谢谢大家! 我认为问题在于:
firstly you need to add tag to fragment ConfigurationFragment2 when initilaize it the edit onActivityResult in your activity like this :
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_configuration);
setTheme(R.style.AppThemeBlueStatusDarkText);
objectInstance();
viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(viewPagerAdapter);
viewPager.setSwipeable(false);
viewPager.setCurrentItem(currentPage);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment ConfigurationFragment2 = getSupportFragmentManager().findFragmentByTag("ConfigurationFragment2 Tag");
switch (requestCode) {
case CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE:
if (ConfigurationFragment2 != null)
ConfigurationFragment2.onActivityResult(requestCode, resultCode, data);
break;
}
}
下图显示了以下内容:
这意味着start()
方法的Activity
参数将用于启动CropImage活动,因此将是接收结果的地方。相反,您应该使用库公开的另一个start()
方法:
这意味着您将使用以下代码:
public void chooseProfilePicture(){
CropImage.activity().setGuidelines(CropImageView.Guidelines.ON).setAspectRatio(1,1).start(getActivity(), this);
}
现在,结果应该传递给您的片段。问题在于这个奇怪的
CropImage
库。您必须使用Fragment.startActivityForResult
,但该库可能正在使用Activity.startActivityForResult
,因此它没有正确地转发到Fragment。该死,它就这么简单。我必须学习如何查看我使用的库的文档,但我认为这比这更复杂。非常感谢你,伙计,不用担心。狩猎快乐!
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_configuration);
setTheme(R.style.AppThemeBlueStatusDarkText);
objectInstance();
viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(viewPagerAdapter);
viewPager.setSwipeable(false);
viewPager.setCurrentItem(currentPage);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
}
firstly you need to add tag to fragment ConfigurationFragment2 when initilaize it the edit onActivityResult in your activity like this :
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_configuration);
setTheme(R.style.AppThemeBlueStatusDarkText);
objectInstance();
viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager());
viewPager.setAdapter(viewPagerAdapter);
viewPager.setSwipeable(false);
viewPager.setCurrentItem(currentPage);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Fragment ConfigurationFragment2 = getSupportFragmentManager().findFragmentByTag("ConfigurationFragment2 Tag");
switch (requestCode) {
case CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE:
if (ConfigurationFragment2 != null)
ConfigurationFragment2.onActivityResult(requestCode, resultCode, data);
break;
}
}
public void chooseProfilePicture(){
CropImage.activity().setGuidelines(CropImageView.Guidelines.ON).setAspectRatio(1,1).start(getActivity());
}
public void start(@NonNull Activity activity) {
mOptions.validate();
activity.startActivityForResult(getIntent(activity), CROP_IMAGE_ACTIVITY_REQUEST_CODE);
}
public void start(@NonNull Context context, @NonNull Fragment fragment) {
fragment.startActivityForResult(getIntent(context), CROP_IMAGE_ACTIVITY_REQUEST_CODE);
}
public void chooseProfilePicture(){
CropImage.activity().setGuidelines(CropImageView.Guidelines.ON).setAspectRatio(1,1).start(getActivity(), this);
}