【发布时间】:2017-06-19 19:23:31
【问题描述】:
我有一个“扫描片段”和“产品表单片段”。任务流程就像, Main Activity -> ScanFragment(按钮单击/扫描某些东西)--> 表单片段(按钮单击)--> ScanFragment(再次显示相同的片段)
如果 ScanFragment 只显示一次,效果很好。但是,当第二次调用时,扫描片段显示黑屏。如果在从 ScanFragment 移动到产品 Fragment 时停止相机,则它会冻结。我认为它的相机问题,但无法弄清楚如何解决这个问题。
ScanFragment onClick 方法:
private void onClickMethods(){
btn_Skip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
PrintLog.show("-- Skip Button is clicked ---");
//releaseCamera(); -- if used, then shows camera but camera freezes
ProductDetailFormFragment productDetailFormFragment = new ProductDetailFormFragment();
getActivity().getSupportFragmentManager().beginTransaction()
.add(R.id.mainFragment, productDetailFormFragment).addToBackStack(AppConstants.C_BACKSTACK_SCAN).commit();
});
}
private void releaseCamera(){
// calls child fragment's camera releasing methods here
// if used camera shows freezed screen only
SimpleScannerFragment simpleScannerFragment = (SimpleScannerFragment) getChildFragmentManager()
.findFragmentById(R.id.scanner_fragment);
simpleScannerFragment.releaseCamera();
}
SimpleScannerFragment(包含 zxing 代码)包含在 Scanlayout 中,如下所示:
<LinearLayout...... >
.....
<fragment android:name="np.com.lins.serviceapp.UI.Modules.BarcodeScanner.SimpleScannerFragment"
android:id="@+id/scanner_fragment"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="match_parent" />
....
</LinearLayout>
SimpleScannerFragment 代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
mScannerView = new ZXingScannerView(getActivity());
PrintLog.show("=== Scanner Fragment : before Return view ==");
return mScannerView;
}
@Override
public void onResume() {
super.onResume();
PrintLog.show("Resume state===");
mScannerView.setResultHandler(this);
mScannerView.stopCamera();
mScannerView.startCamera();
}
//called by parent ScanFragment
public void releaseCamera(){
try{
mScannerView.stopCameraPreview();
mScannerView.stopCamera();
}catch (Exception e){
PrintLog.showException(TAG,"== exception while releasing camera resourc == ",e);
}
}
@Override
public void onPause() {
super.onPause();
mScannerView.stopCameraPreview();
mScannerView.stopCamera();
}
ProductDetailFormFragment 代码:
public void scanFromFragment() {
ScanFragment scanFragment = new ScanFragment();
Bundle bundle = new Bundle();
bundle.putString(AppConstants.C_PARENT_FRAGMENT,AppConstants.C_FRAGMENT_PRODUCT_DETAILS);
scanFragment.setArguments(bundle);
getActivity().getSupportFragmentManager().beginTransaction()
.add(R.id.mainFragment, scanFragment).addToBackStack(AppConstants.C_BACKSTACK_PRODUCT_DETAIL_FORM).commit();
//IntentIntegrator.forSupportFragment(this).initiateScan();
}
【问题讨论】: