【问题标题】:Using ZXing in Activity with Fragment does not work在带有 Fragment 的 Activity 中使用 ZXing 不起作用
【发布时间】:2014-01-13 10:40:58
【问题描述】:

在我的应用程序中,我有一个MainActivity,它使用了不同的片段。其中一个片段是一种细节片段,我想通过扫描二维码来捕捉一些连续剧。目前,我正在尝试使用IntentIntegrator。我能够成功扫描代码,但在那之后,我的应用程序没有正确返回。它只显示我的 MainActivity,但没有 Toast。

我还尝试在片段中添加onActivityResult(),在活动onActivityResult() 中添加super.onActivityResult(),但它始终是相同的行为。它只是跳入 MainActivity 并没有进一步发生。

有人可以向我解释一下我在哪里犯了错误吗?我想扫描条形码并在我的片段类中获取结果。

这是我的MainActivity 代码:

public class MainActivity extends Activity {
    private Button startenButton, ansehenButton, abmeldenButton;
    private FrameLayout fragmentFrame;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        fragmentFrame = (FrameLayout) findViewById(R.id.frameLayout);

        startenButton = (Button) findViewById(R.id.buttonPruefungStart);
        startenButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentTransaction transaction = getFragmentManager().beginTransaction();
                if (fragmentFrame.getChildCount() < 1) {
                    transaction.add(R.id.frameLayout, new PruefungStartenFragment());
                } else {
                    transaction.replace(R.id.frameLayout, new PruefungStartenFragment());
                }
                transaction.commit();
            }
        });
    }

    public void scan() {
         IntentIntegrator integrator = new IntentIntegrator(this);
         integrator.initiateScan();
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        IntentResult scanResult = IntentIntegrator.parseActivityResult(requestCode, resultCode, data);
        if (scanResult != null) {
            Toast.makeText(this, scanResult.getContents(), Toast.LENGTH_LONG).show();
        }
    }

}

这是我的PruefungStartenFragment 代码:

public class PruefungStartenFragment extends Fragment {

    private TextView datum, ort, pruefer, bedienerdisplay, scanner, fingerprintscanner, quittungsdrucker, barcodeleser,
            webcam, kundendisplay, terminal;
    private Button scanButton, startButton;

    public static PruefungStartenFragment newInstance(String code) {
        Bundle args = new Bundle();
        args.putSerializable("code", code);

        PruefungStartenFragment fragment = new PruefungStartenFragment();
        fragment.setArguments(args);

        return fragment;
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.pruefung_starten_fragment, container, false);
        scanButton = (Button) v.findViewById(R.id.buttonScan);
        scanButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                ((MainActivity)getActivity()).scan();
            }
        });



        return v;
    }



}

【问题讨论】:

    标签: java android barcode zxing barcode-scanner


    【解决方案1】:

    我发现了我的问题...在我的清单中,我的 MainActivity 中有一个 android:noHistory="true"。这可以防止条形码扫描仪中的扫描活动将结果传递给我的 MainActivity,因为堆栈上没有任何活动可以将结果传递到。

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 2021-06-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-23
      • 2012-10-23
      相关资源
      最近更新 更多