2015-09-07 2 views
0

Я стараюсь взять изображение с камеры или галереи купить его не установить на ImageViewstartActivityForResult не работает в Fragment

`общественный класс NewPatient расширяет фрагмент { Кнопка Takeimage, сохранить, отменить; int REQUEST_CAMERA = 0, SELECT_FILE = 1; ImageView imageview1; Uri imageUri; частное растровое изображение Bitmap; MediaPlayer mp = новый MediaPlayer(); @Override public View onCreateView (LayoutInflater inflater, контейнер ViewGroup, Bundle savedInstanceState) { Просмотр myFragmentView = inflater.inflate (R.layout.activity_new_patient, container, false);

imageview1 = (ImageView) myFragmentView.findViewById(R.id.imageNP); 
    Takeimage = (Button) myFragmentView.findViewById(R.id.takeimg); 
    save = (Button) myFragmentView.findViewById(R.id.save); 
    cancel = (Button) myFragmentView.findViewById(R.id.cancel); 

    Pakage = (Spinner) myFragmentView.findViewById(R.id.packages); 
    Takeimage.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      selectImage(); 
     } 
    }); 

    imageview1.setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View arg0) { 
      getActivity().openOptionsMenu(); 

     } 
    }); 

    return myFragmentView; 
} 


private void selectImage() { 
    final CharSequence[] items = { "Take Photo", "Choose from Library", 
      "Cancel" }; 

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
    builder.setTitle("Add Photo!"); 
    builder.setItems(items, new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int item) { 
      if (items[item].equals("Take Photo")) { 
       Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
       startActivityForResult(intent, REQUEST_CAMERA); 
      } else if (items[item].equals("Choose from Library")) { 
       Intent intent = new Intent(
         Intent.ACTION_PICK, 
         android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       intent.setType("image/*"); 
       startActivityForResult(
         Intent.createChooser(intent, "Select File"), 
         SELECT_FILE); 
      } else if (items[item].equals("Cancel")) { 
       dialog.dismiss(); 
      } 
     } 
    }); 
    builder.show(); 
} 

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == SELECT_FILE) 
      onSelectFromGalleryResult(data); 
     else if (requestCode == REQUEST_CAMERA) 
      onCaptureImageResult(data); 
    } 
} 

private void onCaptureImageResult(Intent data) { 
    Bitmap thumbnail = (Bitmap) data.getExtras().get("data"); 
    ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
    thumbnail.compress(Bitmap.CompressFormat.JPEG, 90, bytes); 

    File destination = new File(Environment.getExternalStorageDirectory(), 
      System.currentTimeMillis() + ".jpg"); 

    FileOutputStream fo; 
    try { 
     destination.createNewFile(); 
     fo = new FileOutputStream(destination); 
     fo.write(bytes.toByteArray()); 
     fo.close(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    imageview1.setImageBitmap(thumbnail); 
} 

@SuppressWarnings("deprecation") 
private void onSelectFromGalleryResult(Intent data) { 
    Uri selectedImageUri = data.getData(); 
    String[] projection = { MediaColumns.DATA }; 
    Cursor cursor = getActivity().managedQuery(selectedImageUri, projection, null, null, 
      null); 
    int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA); 
    cursor.moveToFirst(); 

    String selectedImagePath = cursor.getString(column_index); 

    Bitmap bm; 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inJustDecodeBounds = true; 
    BitmapFactory.decodeFile(selectedImagePath, options); 
    final int REQUIRED_SIZE = 200; 
    int scale = 1; 
    while (options.outWidth/scale/2 >= REQUIRED_SIZE 
      && options.outHeight/scale/2 >= REQUIRED_SIZE) 
     scale *= 2; 
    options.inSampleSize = scale; 
    options.inJustDecodeBounds = false; 
    bm = BitmapFactory.decodeFile(selectedImagePath, options); 

    imageview1.setImageBitmap(bm); 
}` 

Что такое проблема, я не могу понять. извините за плохой английский

+0

Яффо является правильным. вам нужно перенаправить свой результат Activity на вложенный фрагмент. –

+1

Возможный дубликат [onActivityResult, не вызываемый фрагментом андроида] (http://stackoverflow.com/questions/20062840/onactivityresult-not-called-in-fragment-android) –

ответ

1

Я могу думать о двух случаях

Если вы перекрывая onActivityResult() в своей деятельности, а также убедитесь, что вы называете super.onActivityResult() в вашей деятельности

Если фрагмент является вложенными фрагмент, вам нужно вручную вперед результат родительского фрагмента вложенного фрагмента

1

этот код просматривает

case R.id.take_pic: 
     startActivityForResult(new Intent(
       android.provider.MediaStore.ACTION_IMAGE_CAPTURE), 
       TAKE_REQUEST); 
     break; 
    case R.id.browse_pic: 

     Intent intent = new Intent(); 
     intent.setType("image/*"); 
     intent.setAction(Intent.ACTION_GET_CONTENT); 
     intent.addCategory(Intent.CATEGORY_OPENABLE); 
     startActivityForResult(intent, SELECT_REQUEST); 
     break; 

в результате onActivity

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == TAKE_REQUEST && resultCode == Activity.RESULT_OK) { 
     pic = (Bitmap) data.getExtras().get("data"); 
     imageView.setImageBitmap(pic); 

    } 
    if (requestCode == SELECT_REQUEST && resultCode == Activity.RESULT_OK) { 
     try { 
      InputStream stream = getActivity().getContentResolver() 
        .openInputStream(data.getData()); 
      pic = BitmapFactory.decodeStream(stream); 
      stream.close(); 
      imageView.setImageBitmap(pic); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+0

спасибо за помощь, но не работает для меня ... это моя родительская активность –

+0

вы вызываете начало для активности из активности или фрагмента –

+0

Я думаю, вы пытаетесь выбрать изображение –

Смежные вопросы