我目前正在创建一个扫描产品的应用程序。我正在使用this library来扫描产品代码。我刚刚开始为平板电脑开发,我想使用彼此相邻的两个片段(在摄像机的右侧,左侧是信息),但我遇到了问题。
最初我开始全屏打开相机。每当扫描产品代码时,我想打开第二个片段,显示有关此产品的信息。这工作正常,但是当我想扫描下一个产品代码时,相机片段的结果处理程序永远不会被调用。
我对这个问题的第一个想法是,当第二个片段打开时焦点会丢失,但我不确定这是否正确。
这是我的源代码:
活动
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(...);
resultHandler = new SimpleResultHandler();
initCameraFragment(CodeScannerFragment.newInstance(resultHandler);
}
private void initCameraFragment(CodeScannerFragment scannerFragment) {
mScannerFragment = scannerFragment;
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction()
.add(R.id.packing_scanner_frame, scannerFragment)
.commit();
}
// Called when the code information is retrieved
public void showProductInformation(ProductInformation info) {
FrameLayout packingFrame = (FrameLayout) findViewById(R.id.packing_detail_frame);
if (packingFrame != null) {
packingFrame.setVisibility(View.VISIBLE);
mPackingFragment = ProductInformationFragment.newInstance(info);
FragmentManager manager = getSupportFragmentManager();
manager.beginTransaction()
.add(R.id.packing_detail_frame, (PackingDetailsFragment) mPackingFragment)
.commit();
}
}
扫描程序片段
public static CodeScannerFragment newInstance(ZXingScannerView.ResultHandler resultHandler) {
return new CodeScannerFragment().setResultHandler(resultHandler);
}
private CodeScannerFragment setResultHandler(ZXingScannerView.ResultHandler resultHandler) {
mResultHandler = resultHandler;
return this;
}
@Override
public void onResume() {
super.onResume();
scannerView.setResultHandler(resultHandler);
scannerView.startCamera();
}
@Override
public void onPause() {
super.onPause();
scannerView.stopCamera();
}
结果处理程序
@Override
public void handleResult(Result result) {
String data = result.getText();
ProductInformation info = ...;
activity.showProductInformation(info);
}
注意:我在stackoverlow上更改了一些代码,以保护实际代码(因此可能会出现错字)。
有谁可以帮我解决这个问题?