Ich habe überall gesucht und ich kann keine funktionierende Lösung finden, wie man ZXing in einem Fragment implementiert. Mehrere Quellen haben mir gesagt, dass dies richtig ist, aber onActivityResult wird nie aufgerufen.Verwendung von ZXing in einem Fragment
auf den Button löst den Scanner zu öffnen, sollte
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;
}
Hier wird das Ergebnis der Abfrage verarbeitet werden, aber es wird nie hier
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);
}
}
Versuchen Sie das Fragment an den IntentIntegrator-Konstruktor übergeben. Wo überschreiben Sie auch das onActivityResult? In dem Fragment oder der Aktivität? – jgriffin
Die Methode 'onActivityResult' der Aktivität, die Ihr Fragment enthält, wird aufgerufen. –
@jgriffin Ja, ich überschreibe das onActivityResult, und ich habe versucht, das Fragment in. –