2016-01-22 108 views
3

叫我在之後的片段。如startActivityForResult我曾嘗試下面的東西onActivityResult並沒有叫: 1)startActivityResultonActivityResult不片段

2)之前加入getParentFragment,getActivity加在清單的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)錯誤 - [{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以及與此它不是打電話。所以刪除開關的情況下。而現在,它的工作

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

這是很常見和已知問題的片段onActivityResult。我用一種方式解決了問題,也可能有其他方法。當你從Activity這樣的移動Fragment

設置標籤。

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

寫信下面的代碼在你的ActivityonActivityResult

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調用這個片段這樣的擴展FragmentPagerAdapter { 公共MyAdapter(FragmentManager FM){ 超(FM); } @Override 公共片段的getItem(INT位置) { 開關(位置){ 情況下0:返回新FirstFragment(); case 1:return new SecondFragment(); 殼體2:返回新ThirdFragment(); } 返回NULL; }那麼,有沒有辦法來調用片段,你上面提到的? –

0

我在使用片段內的FragmentPagerAdapter時遇到了類似的問題。問題是,我與該片的FragmentManager初始化我PagerAdapter,我代替:

new MyPagerAdapter(getChildFragmentManager()); 

new MyPagerAdapter(getFragmentManager()); 

所以它可能是值得檢查其FragmentManager您使用。我不是很滿意這種方法100%,但因爲它似乎是正確調用片段的FragmentManager。但是我沒有時間去檢查它。

相關問題