如何正确地相邻运行两个片段(包括相机)?

时间:2017-05-16 11:50:07

标签: android android-fragments zxing

我目前正在创建一个扫描产品的应用程序。我正在使用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上更改了一些代码,以保护实际代码(因此可能会出现错字)。

有谁可以帮我解决这个问题?

0 个答案:

没有答案