Таким образом, я кодирую это приложение, которое должно выбрать изображение профиля с телефона, обрезать, сжать и сохранить изображение в произвольном месте во внутренней памяти, а также установить сжатое растровое изображение в качестве предварительного просмотра при круговом просмотре изображений.Все это внутри фрагмента.Но мой onActivityResult вообще не вызывается внутри фрагмента.
Вот мой код:
ViewPagerAdapter.class
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position)
{
case 0:
return new ConfigurationFragment1();
case 1:
return new ConfigurationFragment2();
}
return null;
}
@Override
public int getCount() {
return 2;
}
}
ConfigurationFragment2.class
public class ConfigurationFragment2 extends Fragment {
CircularImageView profilePicker;
EditText user1NameInput;
Uri profileImageURI;
Bitmap compressedImageFile;
Boolean profileImageSet = false;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View rootView = inflater.inflate(R.layout.fragment_configuration_2, container, false);
profilePicker = rootView.findViewById(R.id.configuration_profile_picker);
user1NameInput = rootView.findViewById(R.id.configuration_name_1);
profilePicker.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
Toast.makeText(getActivity(), "Permission Denied", Toast.LENGTH_LONG).show();
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
else if(ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED){
Toast.makeText(getActivity(), "Permission Denied", Toast.LENGTH_LONG).show();
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
}
else {
chooseProfilePicture();
}
}
});
return rootView;
}
public void chooseProfilePicture(){
CropImage.activity().setGuidelines(CropImageView.Guidelines.ON).setAspectRatio(1,1).start(getActivity());
}
@Override
public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE)
{
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if(resultCode == Activity.RESULT_OK)
{
assert result != null;
profileImageURI = result.getUri();
File thumbnailURI = new File(Objects.requireNonNull(profileImageURI.getPath()));
try
{
compressedImageFile = new Compressor(getActivity())
.setMaxHeight(500)
.setMaxWidth(500)
.setQuality(100)
.compressToBitmap(thumbnailURI);
}
catch (IOException e)
{
e.printStackTrace();
}
profilePicker.setImageBitmap(compressedImageFile);
String profilePictureFolder = "/com.testapp.app/";
String profilePictureUser1Name = "profilePicUser1.jpg";
String profilePictureUser1Path = Environment.getExternalStorageDirectory().toString() + profilePictureFolder + profilePictureUser1Name;
File imagePath = new File(profilePictureUser1Path);
FileOutputStream fos;
try {
if (!imagePath.exists()) {
File wallpaperDirectory = new File(Environment.getExternalStorageDirectory().toString() + profilePictureFolder);
wallpaperDirectory.mkdirs();
}
File file = new File(new File(Environment.getExternalStorageDirectory().toString() + profilePictureFolder), profilePictureUser1Name);
if (file.exists()) {
file.delete();
}
fos = new FileOutputStream(imagePath);
compressedImageFile.compress(Bitmap.CompressFormat.JPEG, 85, fos);
fos.flush();
fos.close();
profileImageSet = true;
} catch (FileNotFoundException e) {
Log.e("eRROR", e.getMessage(), e);
} catch (IOException e) {
e.printStackTrace();
}
}
else if(resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE)
{
assert result != null;
Exception error = result.getError();
}
}
}
}
и MainActivity.class
@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);
}
Код onActivityResult работает безупречно при нормальной активности, но не в этом фрагменте.Как именно я могу решить мою проблему?Спасибо!