2016-03-04 2 views
0

Я новичок в Android.не может получить доступ к методуActivityResult() во фрагменте

Я собираюсь сделать подборщик изображений из камеры и проводника файлов.

Я нашел код примера из поиска в Google.

Но после захвата, не звоните onActivityResult() Метод.

Поэтому я не могу обработать результат захвата.

примечание: работаю Fragment.

public void selectImage(){ 
final String [] items = new String [] {"Take Photo", "Choose Photo"}; 
     ArrayAdapter<String> adapter = new ArrayAdapter<String> (getActivity(), android.R.layout.select_dialog_item, items); 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setTitle("Add/Change Photo"); 
     builder.setAdapter(adapter, new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int item) { 
       if (item == 0) { 
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 
        File file  = new File(Environment.getExternalStorageDirectory(), 
          "tmp_avatar_" + String.valueOf(System.currentTimeMillis()) + ".jpg"); 
        mImageCaptureUri = Uri.fromFile(file); 
        try { 
         intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri); 
         intent.putExtra("return-data", true); 

         startActivityForResult(intent, PICK_FROM_CAMERA); 
        } 
        catch (Exception e) { 
         e.printStackTrace(); 
        } 
        dialog.cancel(); 
       } 
       else { 
        Intent intent = new Intent(); 
        intent.setType("image/*"); 
        intent.setAction(Intent.ACTION_GET_CONTENT); 
        getActivity().startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE); 
       } 
      } 
     }); 
     final AlertDialog dialog = builder.create(); 
     dialog.show(); 
    } 

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

     // TODO Fix no activity available 
     if (resultCode != getActivity().RESULT_OK) 
      return; 
     Bitmap bitmap = null; 
     String path  = ""; 
     if (requestCode == PICK_FROM_FILE) { 
      mImageCaptureUri = data.getData(); 
      path = getRealPathFromURI(mImageCaptureUri); // From Gallery 

      if (path == null) 
       path = mImageCaptureUri.getPath(); // From File Manager 

      if (path != null) 
       bitmap = BitmapFactory.decodeFile(path); 
     } 
     else { 
      path = mImageCaptureUri.getPath(); 
      bitmap = BitmapFactory.decodeFile(path); 
     } 

     imgProfile.setImageBitmap(bitmap); 
     super.onActivityResult(requestCode, resultCode, data); 
    } 

ответ

0

В коде фрагмента необходимо вызвать действие из фрагмента. Вместо:

getActivity().startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE); 

необходимо указать следующее, так как код находится внутри вложенного класса.

YOUR_FRAGMENT.this.startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE); 

без getActivity.

+0

Спасибо за ваше время. Но я пытался получить доступ без getActivity(), но я не могу. Любые другие недостатки? –

+0

Почему вы не можете это сделать? –

+0

проверить, если вы получаете курсор в методе onActivityResult() родительской активности этого фрагмента –

1

вызова getActivity().startActivityForResult() приведет вызов onActivityResult() на активность хостинг фрагмента и не onActivityResult() из Фрагмент это сам.

Если вы хотите позвонить в onActivityResult() в самой Фрагмент вызова

startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE); 

и если вы хотите, чтобы справиться с ней действие, которое нужно вызвать:

getActivity().startActivityForResult(Intent.createChooser(intent, "Complete action using"), PICK_FROM_FILE); 

Также вы можете захотеть реорганизовать свой onActivityResult() как

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

     // TODO Fix no activity available 
     if (resultCode != getActivity().RESULT_OK) 
      Bitmap bitmap = null; 
     String path = ""; 
     if (requestCode == PICK_FROM_FILE) { 
      mImageCaptureUri = data.getData(); 
      path = getRealPathFromURI(mImageCaptureUri); // From Gallery 

      if (path == null) 
       path = mImageCaptureUri.getPath(); // From File Manager 

      if (path != null) 
       bitmap = BitmapFactory.decodeFile(path); 
     } else { 
      path = mImageCaptureUri.getPath(); 
      bitmap = BitmapFactory.decodeFile(path); 
     } 

     imgProfile.setImageBitmap(bitmap); 

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