2016-01-22 3 views
3

В моем фрагменте onActivityResult не вызывающему после startActivityForResult .Как я попытался следующие вещи: 1) добавление getParentFragment, getActivity перед тем startActivityResultне onActivityResult называется в Фрагмент

2) добавлены на манифеста Android: configChanges = "ориентация | Размер экрана»

3) onActivityResult is not being called in Fragment

4) Проверено покрытие() в ZbarScanner активность

Intent dataIntent = new Intent(); 
        dataIntent.putExtra(SCAN_RESULT, symData); 
        dataIntent.putExtra(SCAN_RESULT_TYPE, sym.getType()); 
        setResult(Activity.RESULT_OK, dataIntent); 
        finish(); 

5) error- [ResultInfo {кто = NULL, запрос = 196609, результат = -1, данные = {Намерение (имеет дополнительные услуги)}}]} проверено намерение имеет значение не нулевое, который мы проходим

if (isCameraAvailable()) { 
        Intent intent = new Intent(this.getActivity(), ZBarScannerActivity.class); 
        intent.putExtra(ZBarConstants.SCAN_MODES, new int[]{Symbol.QRCODE}); 

        startActivityForResult(intent, 1); 


        Toast.makeText(getActivity(), "inside case", Toast.LENGTH_SHORT).show(); 


       } else { 
        Toast.makeText(getActivity(), "Rear Facing Camera Unavailable", Toast.LENGTH_SHORT).show(); 
       } 

---- onActivityResult ------

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

      super.onActivityResult(requestCode, resultCode, data); 
      Bundle bundle = data.getExtras(); 


      switch (requestCode) { 
       case ZBAR_SCANNER_REQUEST: 
       case ZBAR_QR_SCANNER_REQUEST: 
        if (resultCode == getActivity().RESULT_OK) { 


         Toast.makeText(getActivity(), "Scan Result = " + data.getStringExtra(ZBarConstants.SCAN_RESULT), Toast.LENGTH_SHORT).show(); 

        } else if (resultCode == getActivity().RESULT_CANCELED && data != null) { 
         String error = data.getStringExtra(ZBarConstants.ERROR_INFO); 
         if (!TextUtils.isEmpty(error)) { 
          Toast.makeText(getActivity(), error, Toast.LENGTH_SHORT).show(); 
         } 
        }} 

ответ

2

Я назвал onActivityResult на MainActivity и с этим его не вызывающим .so удаленного выключателем при й его работе в настоящее время

switch (requestCode) { 
      case ZBAR_SCANNER_REQUEST: 
      case ZBAR_QR_SCANNER_REQUEST: 
0

это очень распространенный и известный вопрос для фрагмента onActivityResult. Я решил это одним способом, могут быть и другие способы.

установка тега при переходе на Fragment от Activity вот так.

fragmentManager.beginTransaction().replace(R.id.frame_container, fragment,"tag").commit(); 

сейчас пишу ниже кода в onActivityResult из Activity.

if (requestCode == 1) { //set your requestcode whichever you are using 
     //super.onActivityResult(requestCode, resultCode, data); 
     //dont forget to comment this. 

     Fragment fragment = (Fragment) getSupportFragmentManager().findFragmentByTag("tag"); 
     if(fragment != null){ 
      fragment.onActivityResult(requestCode, resultCode, data); 
     } 
} 
+0

Поскольку мы не заменить его. Мы вызываем этот фрагмент следующим образом в классе вкладок. MyAdapter extends FragmentPagerAdapter { public MyAdapter (FragmentManager fm) { super (fm); } @Override общественности Фрагмент GetItem (целое положение) { переключатель (положение) { случай 0: возвратить новый FirstFragment(); case 1: return new SecondFragment(); case 2: вернуть новый ThirdFragment(); } null null; }, так есть ли способ вызвать фрагмент, как вы упомянули выше? –

0

У меня была аналогичная проблема при работе с FragmentPagerAdapter внутри фрагмента. Проблема заключалась в том, что я инициализируется моей PagerAdapter с осколком FragmentManager, я заменил:

new MyPagerAdapter(getChildFragmentManager()); 

с

new MyPagerAdapter(getFragmentManager()); 

Так может быть стоит проверка, которая FragmentManager вы используете. Я не на 100% доволен этим подходом, так как кажется правильным назвать Фрагмент FragmentManager. Но я еще не успел проверить его еще.