您不能在其作用域之外调用该方法。
protected void onActivityResult (int requestCode, int resultCode, Intent data)
如果该方法是像这种情况下的
protected,您可以查看
访问级别表格以了解如何进行操作。
|-----------------------------------------------------------|
| ACCESS LEVELS |
|------------------|---------|---------|----------|---------|
| Modifier | Class | Package | Subclass | World |
|------------------|---------|---------|----------|---------|
| public | Y | Y | Y | Y |
|------------------|---------|---------|----------|---------|
| protected | Y | Y | Y | N |
|------------------|---------|---------|----------|---------|
| no modifier | Y | Y | N | N |
|------------------|---------|---------|----------|---------|
| private | Y | N | N | N |
|------------------|---------|---------|----------|---------|
如您所见,此方法仅限于从android.app.*
包、Activity
及其子类中调用。
解决方案:
您需要执行以下操作:
我们有一个名为ImagePicker
的类,用于从Gallery或Camera或Delete中选择图像。如果用户想要删除图像,则此类需要调用onActivityResult
(我们不需要为已知结果启动Activity
)。
public class ImagePicker {
private ImagePickerDelegate delegate;
public ImagePicker (ImagePickerDelegate delegate) {
this.delegate = delegate;
}
public void show() {
}
public void handleResponse(Intent data) {
}
public interface ImagePickerDelegate {
void onImageHandled(Bitmap image);
void onImageError();
void onImageDeleted();
}
}
为在我们的
Activity
中使用这个类,我们需要实现委托方法并将我们的Activity作为
ImagePicker
的委托。
public class MyActivity extends Activity implements ImagePicker.ImagePickerDelegate {
ImagePicker imagePicker;
@OnClick(R.id.image_edit)
public void selectImage () {
imagePicker = new ImagePicker(this);
imagePicker.show();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ImagePicker.REQUEST_IMAGE_PICKER && resultCode == RESULT_OK) {
imagePicker.handleResponse(data);
}
super.onActivityResult(requestCode, resultCode, data);
}
@Override
public void onImageHandled(Bitmap image) {
imageView.setImageBitmap(image);
}
@Override
public void onImageError() {
Toast.makeText(this, "Whoops - unexpected error!", Toast.LENGTH_SHORT).show();
}
@Override
public void onImageDeleted() {
groupImageView.setImageBitmap(null);
groupImageView.setImageResource(R.drawable.ic_pick_picture);
}
}
最后,我们需要使这些委托方法被调用,在show()
和 handleResponse(Intent data)
中实现:
public void show() {
NavigationView navView = (NavigationView)viewInflated.findViewById(R.id.navigation_menu);
navView.setNavigationItemSelectedListener( new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(MenuItem menuItem) {
switch (menuItem.getItemId()) {
case R.id.action_select_image:
Intent pickPhoto = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
activity.startActivityForResult(pickPhoto , REQUEST_IMAGE_PICKER);
break;
case R.id.action_take_picture:
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
activity.startActivityForResult(takePicture, REQUEST_IMAGE_PICKER);
break;
case R.id.action_delete_image:
delegate.onImageDeleted();
break;
}
alertDialog.dismiss();
return true;
}
});
}
public void handleResponse(Intent data) {
try {
delegate.onImageHandled(image);
} catch (Exception e) {
e.printStackTrace();
delegate.onImageError();
}
}
最终,我们拥有了一个class
,它可以调用你的Activity
中的方法,而不是onActivityResult
。但在onActivityResult
中获取结果时,你需要在那个class
中进行处理。