2012-03-19 18 views
5

ZXing 2.0ライブラリ経由でQRコードスキャンを実行すると、フラグメントを起動する際にいくつか問題が発生します。これがなぜ起こるか疑問に思っZXing 2.0 QRコードスキャン後のフラグメントの起動

@Override 
    public void onCreate(Bundle bundle) { 
     // TODO Auto-generated method stub 
     super.onCreate(bundle); 
     setContentView(R.layout.scan_qr_code); 

     Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
     intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
     startActivityForResult(intent, 0); 
    } 

public void onActivityResult(int requestCode, int resultCode, Intent intent) { 
     if (requestCode == 0) 
     { 
      if (resultCode == RESULT_OK) 
      { 
       String contents = intent.getStringExtra("SCAN_RESULT"); 
       String format = intent.getStringExtra("SCAN_RESULT_FORMAT"); 
       // Handle successful scan 
       Log.d("MENU", "Scan result: " + contents + " as " + format); 

       // Load details for qr code 
        FragmentTransaction fragmentTransaction = getSupportFragmentManager() 
          .beginTransaction(); 

        Fragment fragmentDetails = new FragmentDetails(
          contents); 

        fragmentTransaction 
          .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
        fragmentTransaction.replace(R.id.fragment_main, 
          fragmentDetails); 
        fragmentTransaction.addToBackStack(null); 
        fragmentTransaction.commit(); 
      } 
      else if (resultCode == RESULT_CANCELED) 
      { 
       // Handle cancel 
       Log.d("MENU", "Scan canceled"); 
      } 
     } 
    } 

I'am:私はこのコードを実行すると

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { act=com.google.zxing.client.android.SCAN flg=0x80000 (has extras) }} to activity {fraiss.yucrowd/fraiss.yucrowd.activities.ScanQrCode}: java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState* 

私はこの例外を得ました。 ActivityResultの終わりにフラグメントトランザクションを起動することはできませんか?

Thxを事前にご利用ください。

答えて

2

これは基本的に、アクティビティが一時停止しているため、onActivityResultonSaveInstanceStateの後に呼び出されているため、「このアクションはonSaveInstanceStateの後に実行できません」というメッセージが表示されます。 requestCode、resultCode、intentを保存しておき、もし何か作業があればonResumeをチェックしてください。

7

onResumeの前にonActivityResultが呼び出され、アクティビティが少なくともonResumeと呼ばれる前に新しいフラグメントを追加することはできません。

したがって、あなたはonActivityResultにあるデータを保存し、これをonResumeにチェックし、そこでフラグメントの変更を実行する必要があります。

関連する問題