【问题标题】:get zxing data into swipe view fragment将 zxing 数据放入滑动视图片段
【发布时间】:2014-12-28 21:42:05
【问题描述】:

我在 viewpager 选项卡的片段中使用 zxing。我可以用 Intent 调用 zxing 并读取 QR 码,但我无法将结果写入编辑文本。

这是我在 FragmentPagerAdapter 中创建选项卡的地方:

@Override
    public Fragment getItem(int i) {
        switch (i) {
        case 0:
            return new Tab1();
        case 1:
            return new Tab2();
        default:
            return new EmptyTab();
        }
    }

还有我的 Tab1 类:

public class Tab1 extends Fragment {
@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.tab_1, container, false);
        IDEditText = (EditText) rootView.findViewById(R.id.fttx_id_editText);

        Button scanBarcode = (Button) rootView.findViewById(R.id.scan_barcode);

        scanBarcode.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity);
                scanIntegrator.initiateScan();
            }
        });

        return rootView;
    }



    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
        // retrieve scan result
        IntentResult scanningResult = IntentIntegrator.parseActivityResult(
                requestCode, resultCode, intent);
        if (scanningResult != null) {
            // we have a result
            String scanContent = scanningResult.getContents();
            IDEditText .setText("CONTENT: " + scanContent);
        } else {
            Toast.makeText(getActivity(),
                    "No scan data received!", Toast.LENGTH_SHORT).show();
        }
    }

zxing 开始;然后读取;然后结束;但没有扫描数据:我认为“onActivityResult”永远不会启动:(

如何在这个片段中使用 zxing?

【问题讨论】:

  • 您是否还在 Activity 中覆盖 onActivityResult(),还是仅覆盖 Fragment?如果你是,你应该调用super.onActivityResult,它将结果推送到任何片段。
  • @ataulm;我只是在我的片段中使用'onActivityResult()';不在我的 Activity 中覆盖。
  • 在 if 语句的第一部分做一个 toast 文本,看看它是否到达那里,然后告诉我们
  • @ataulm;我现在在 Activity 中使用 'super.onActivityResult(arg0, arg1, arg2);' 覆盖它但没用。
  • @PanayiotisIrakleous;我做到了,但它从来没有进入'onActivityResult'

标签: android android-fragments zxing


【解决方案1】:

IntentIntegrator 有另一个构造函数,采用 Fragment。而不是:

scanBarcode.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        IntentIntegrator scanIntegrator = new IntentIntegrator(getActivity());
        scanIntegrator.initiateScan();
    }
});

你可以使用:

scanBarcode.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        IntentIntegrator scanIntegrator = new IntentIntegrator(Tab1.this);
        scanIntegrator.initiateScan();
    }
});

它应该直接为片段调用onActivityResult

一个示例显示了从 Activity 和从 Fragment 启动 Intent 的工作用法,并安装了条形码扫描仪is demonstrated in this GitHub repo


如果您使用 v4 支持库 Fragments,IntentIntegratorSupportV4 类提供兼容性:

IntentIntegrator scanIntegrator = new IntentIntegratorSupportV4(Tab1.this);

【讨论】:

  • 是的.. 它现在可以工作了 :) 我正在使用支持库;所以我使用了 IntentIntegratorSupportV4 构造函数。谢了。
  • 您使用的是哪个版本?我使用的是 3.2.1 版本的 IntentIntegrator,并且没有 IntentIntegratorSupportV4 构造函数。
【解决方案2】:

将此添加到您的清单中

    <!-- Zxing scan activity -->
    <activity
        android:name="com.google.zxing.client.android.CaptureActivity"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="landscape"
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:windowSoftInputMode="stateAlwaysHidden" >
    </activity>

然后把onclick方法改成这个

    Intent intent = new Intent(context, CaptureActivity.class);
    intent.setAction("com.google.zxing.client.android.SCAN");
    // this stops saving ur barcode in barcode scanner app's
    // history
    intent.putExtra("SAVE_HISTORY", false);
    startActivityForResult(intent, 0); 

最后把 on 结果改成这个

if(requestCode==0)
    if(resultCode==Activity.RESULT_OK){
         Toast.makeText(getActivity(),"Scan Result = " + data.getStringExtra("SCAN_RESULT"),
             Toast.LENGTH_SHORT).show();
    }

【讨论】:

  • 我的项目中没有 CaptureActivity。我只是使用'com.google.zxing.integration.android'包的'IntentIntegrator'和'IntentResult'。
  • CaptureActivity 在 zxing 库项目中
  • @ataulm 因为我想将 zxing 扫描活动添加到我的应用程序中,而不仅仅是打开条形码扫描仪应用程序
【解决方案3】:

适用于较新的 Zxing BarcodeScanner 库。 IntentIntegratorSupportV4(Fragment.this) 不可用。你可以用这个。

IntentIntegrator integrator = IntentIntegrator.forSupportFragment(Fragment.this);
 integrator.initiateScan();

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2014-01-28
    相关资源
    最近更新 更多