在应用程序的 2 个片段中使用 Scandit BarcodeScanner
Using Scandit BarcodeScanner in 2 fragment of an application
我开发了一个扫描条码的应用程序。我的应用程序是一个带有 2 个选项卡的 Android TabView 应用程序。我想在它们中添加条形码扫描仪。
我的代码如下:
片段 1:
public class WebServiceFragment extends Fragment {
RelativeLayout scanServiceView;
ScanditSDKAutoAdjustingBarcodePicker barcodePicker;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(container == null) {
return null;
}
View v = inflater.inflate(R.layout.webservice_layout, container, false);
scanServiceView = (RelativeLayout)v.findViewById(R.id.scanserviceview);
barcodePicker = new ScanditSDKAutoAdjustingBarcodePicker(getActivity(), "<My Scandit SDK Key 1>", ScanditSDKAutoAdjustingBarcodePicker.CAMERA_FACING_BACK);
barcodePicker.startScanning();
scanServiceView.addView(barcodePicker);
return v;
}
}
片段 2:
public class CMCSMOFragment extends Fragment {
RelativeLayout scanSMOView;
ScanditSDKAutoAdjustingBarcodePicker barcodePicker;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(container == null) {
return null;
}
View v = inflater.inflate(R.layout.cmcsmo_layout, container, false);
scanSMOView = (RelativeLayout)v.findViewById(R.id.scansmoview);
barcodePicker = new ScanditSDKAutoAdjustingBarcodePicker(getActivity(), "<My Scandit SDK Key 2>", ScanditSDKAutoAdjustingBarcodePicker.CAMERA_FACING_BACK);
barcodePicker.startScanning();
scanSMOView.addView(barcodePicker);
return v;
}
}
但是当我构建时,只有 Fragment2
显示用于扫描的相机视图。 Fragment1
显示黑屏。如果我删除调用 Scandit SDK
的 Fragment2
代码,Fragment1
将正常工作。
这种情况我该怎么办?下图是问题屏幕:
- 片段 1:
- 片段 2:
正如评论中所指出的,您需要在离开 Fragment 时停止扫描。
这是因为 Fragment 在离开时没有破坏其视图。因此,只要您保留该引用,就不会收集您对 barcodePicker 的引用。
相机不允许连接多个信号源,因此您必须先断开与它的连接,然后才能尝试在其他地方使用它。
我开发了一个扫描条码的应用程序。我的应用程序是一个带有 2 个选项卡的 Android TabView 应用程序。我想在它们中添加条形码扫描仪。
我的代码如下:
片段 1:
public class WebServiceFragment extends Fragment {
RelativeLayout scanServiceView;
ScanditSDKAutoAdjustingBarcodePicker barcodePicker;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(container == null) {
return null;
}
View v = inflater.inflate(R.layout.webservice_layout, container, false);
scanServiceView = (RelativeLayout)v.findViewById(R.id.scanserviceview);
barcodePicker = new ScanditSDKAutoAdjustingBarcodePicker(getActivity(), "<My Scandit SDK Key 1>", ScanditSDKAutoAdjustingBarcodePicker.CAMERA_FACING_BACK);
barcodePicker.startScanning();
scanServiceView.addView(barcodePicker);
return v;
}
}
片段 2:
public class CMCSMOFragment extends Fragment {
RelativeLayout scanSMOView;
ScanditSDKAutoAdjustingBarcodePicker barcodePicker;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if(container == null) {
return null;
}
View v = inflater.inflate(R.layout.cmcsmo_layout, container, false);
scanSMOView = (RelativeLayout)v.findViewById(R.id.scansmoview);
barcodePicker = new ScanditSDKAutoAdjustingBarcodePicker(getActivity(), "<My Scandit SDK Key 2>", ScanditSDKAutoAdjustingBarcodePicker.CAMERA_FACING_BACK);
barcodePicker.startScanning();
scanSMOView.addView(barcodePicker);
return v;
}
}
但是当我构建时,只有 Fragment2
显示用于扫描的相机视图。 Fragment1
显示黑屏。如果我删除调用 Scandit SDK
的 Fragment2
代码,Fragment1
将正常工作。
这种情况我该怎么办?下图是问题屏幕:
- 片段 1:
- 片段 2:
正如评论中所指出的,您需要在离开 Fragment 时停止扫描。
这是因为 Fragment 在离开时没有破坏其视图。因此,只要您保留该引用,就不会收集您对 barcodePicker 的引用。
相机不允许连接多个信号源,因此您必须先断开与它的连接,然后才能尝试在其他地方使用它。