2017-06-12 11 views
1

私はすべての場所を検索しましたが、断片にZXingを実装する方法については、実際の解決策を見つけることができません。複数の情報源から、これは正しいと言われていますが、onActivityResultは決して呼び出されません。フラグメント内でZXingを使用する

ボタンのクリックが

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
    view = inflater.inflate(R.layout.fragment_barcode,container,false); 
    final Button openBC = (Button)view.findViewById(R.id.btnOpen); 
    openBC.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v){ 
      //This opens up the Barcode Scanner 
      IntentIntegrator integrator = new IntentIntegrator(getActivity()); 
      integrator.setDesiredBarcodeFormats(IntentIntegrator.ALL_CODE_TYPES); 
      integrator.setPrompt("Scan A barcode or QR Code"); 
      integrator.setCameraId(0); 
      integrator.setBeepEnabled(false); 
      integrator.setBarcodeImageEnabled(false); 
      integrator.initiateScan(); 
     } 
    }); 


    return view; 
} 

あなたからonActivityResultオーバーライドするためのスキャンの結果を処理しなければならない場所ですが、それはここで

public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    IntentResult result = IntentIntegrator.parseActivityResult(requestCode, resultCode, data); 
    if(result != null) { 
     if(result.getContents() == null) { 
      Log.d("MainActivity", "Cancelled scan"); 
      Toast.makeText(getActivity(), "canceled",Toast.LENGTH_LONG).show(); 
     } else { 
      Log.d("MainActivity", "Scanned"); 
      Toast.makeText(getActivity(),"Scanned: " + result.getContents(),Toast.LENGTH_LONG).show(); 
     } 
    }else { 
     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 
+1

IntentIntegratorコンストラクタにFragmentを渡してみてください。また、onActivityResultをどこで上書きしていますか?断片や活動の中で? – jgriffin

+0

あなたのフラグメントを含むアクティビティの 'onActivityResult'メソッドが呼び出されます。 –

+0

@jgriffinはい、onActivityResultをオーバーライドして、フラグメントを渡してみました。 –

答えて

2

を取得することはありません。これは起こるを開くためにスキャナをトリガ断片化しますが、intentIntegrator IntentIntegrator integrator = new IntentIntegrator(getActivity());をアクティビティ付きで初期化します。

2つのオプションがあります。 1)アクティビティ の中でonActivityResultを上書きします。2)アクティビティインスタンス内の初期化パスのフラグメントを変更します。

これは、あなたの助けのようになります。

断片がMyFragmentと呼ばれていると仮定すると:

IntentIntegrator.forFragment(MyFragment.this).initiateScan(); 

ZXing Minimal

+0

IntentIntegratorのforFragment(android.app.Fragment)を(anonymous android.view.View.OnClickListener)に適用できません –

+0

これは私に伝えます。あなたがフラグメントインスタンスの代わりにインターフェイスを渡すonclicklistenerの中で "this"を使用するためです。 "NameOfYourFragment"を使用してください。この –

+0

@DanJackson私の編集した回答を参照してください –

1

断片が 輸入android.support.v4.app.Fragmentから輸入されている場合、あなたはIntentIntegrator.forSupportFragment(this).initiateScan();

を使用する必要があります

フレームセグメントをからインポートした場合import android.app.FragmentIntentIntegrator.forFragment(MyFragment.this).initiateScan();を使用できます。

関連する問題