私はすべての場所を検索しましたが、断片に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);
}
}
IntentIntegratorコンストラクタにFragmentを渡してみてください。また、onActivityResultをどこで上書きしていますか?断片や活動の中で? – jgriffin
あなたのフラグメントを含むアクティビティの 'onActivityResult'メソッドが呼び出されます。 –
@jgriffinはい、onActivityResultをオーバーライドして、フラグメントを渡してみました。 –