我应该使用新活动还是片段来扫描条形码?

雷内·埃德(Rene Eder)

我有一个活动,用户应该可以通过写2个参数或通过单击edittext旁边的按钮使用条形码扫描仪来输入2个参数。

ConfigActivity

对于扫描,我将使用zxing,因为我可以找到许多有用的示例。扫描后,应将扫描值写入用户的编辑框中。

我的问题是我不知道该使用片段还是新活动,因为我需要与之沟通。

片段很有意义,因为我想用相机/扫描仪覆盖整个屏幕,但是建议您在2个整个屏幕片段之间切换吗?

如果我应该使用片段,那么在这种情况下最好的方法是什么?

xzing作为片段的示例:

public class FullScannerActivity extends BaseScannerActivity implements MessageDialogFragment.MessageDialogListener,
    ZXingScannerView.ResultHandler, FormatSelectorDialogFragment.FormatSelectorDialogListener,
    CameraSelectorDialogFragment.CameraSelectorDialogListener {
private static final String FLASH_STATE = "FLASH_STATE";
private static final String AUTO_FOCUS_STATE = "AUTO_FOCUS_STATE";
private static final String SELECTED_FORMATS = "SELECTED_FORMATS";
private static final String CAMERA_ID = "CAMERA_ID";
private ZXingScannerView mScannerView;
private boolean mFlash;
private boolean mAutoFocus;
private ArrayList<Integer> mSelectedIndices;
private int mCameraId = -1;

@Override
public void onCreate(Bundle state) {
    super.onCreate(state);
    if(state != null) {
        mFlash = state.getBoolean(FLASH_STATE, false);
        mAutoFocus = state.getBoolean(AUTO_FOCUS_STATE, true);
        mSelectedIndices = state.getIntegerArrayList(SELECTED_FORMATS);
        mCameraId = state.getInt(CAMERA_ID, -1);
    } else {
        mFlash = false;
        mAutoFocus = true;
        mSelectedIndices = null;
        mCameraId = -1;
    }

    setContentView(R.layout.activity_simple_scanner);
    setupToolbar();

    ViewGroup contentFrame = (ViewGroup) findViewById(R.id.content_frame);
    mScannerView = new ZXingScannerView(this);
    setupFormats();
    contentFrame.addView(mScannerView);
}

@Override
public void onResume() {
    super.onResume();
    mScannerView.setResultHandler(this);
    mScannerView.startCamera(mCameraId);
    mScannerView.setFlash(mFlash);
    mScannerView.setAutoFocus(mAutoFocus);
}

@Override
public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putBoolean(FLASH_STATE, mFlash);
    outState.putBoolean(AUTO_FOCUS_STATE, mAutoFocus);
    outState.putIntegerArrayList(SELECTED_FORMATS, mSelectedIndices);
    outState.putInt(CAMERA_ID, mCameraId);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuItem menuItem;

    if(mFlash) {
        menuItem = menu.add(Menu.NONE, R.id.menu_flash, 0, R.string.flash_on);
    } else {
        menuItem = menu.add(Menu.NONE, R.id.menu_flash, 0, R.string.flash_off);
    }
    MenuItemCompat.setShowAsAction(menuItem, MenuItem.SHOW_AS_ACTION_NEVER);


    if(mAutoFocus) {
        menuItem = menu.add(Menu.NONE, R.id.menu_auto_focus, 0, R.string.auto_focus_on);
    } else {
        menuItem = menu.add(Menu.NONE, R.id.menu_auto_focus, 0, R.string.auto_focus_off);
    }
    MenuItemCompat.setShowAsAction(menuItem, MenuItem.SHOW_AS_ACTION_NEVER);

    menuItem = menu.add(Menu.NONE, R.id.menu_formats, 0, R.string.formats);
    MenuItemCompat.setShowAsAction(menuItem, MenuItem.SHOW_AS_ACTION_NEVER);

    menuItem = menu.add(Menu.NONE, R.id.menu_camera_selector, 0, R.string.select_camera);
    MenuItemCompat.setShowAsAction(menuItem, MenuItem.SHOW_AS_ACTION_NEVER);

    return super.onCreateOptionsMenu(menu);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle presses on the action bar items
    switch (item.getItemId()) {
        case R.id.menu_flash:
            mFlash = !mFlash;
            if(mFlash) {
                item.setTitle(R.string.flash_on);
            } else {
                item.setTitle(R.string.flash_off);
            }
            mScannerView.setFlash(mFlash);
            return true;
        case R.id.menu_auto_focus:
            mAutoFocus = !mAutoFocus;
            if(mAutoFocus) {
                item.setTitle(R.string.auto_focus_on);
            } else {
                item.setTitle(R.string.auto_focus_off);
            }
            mScannerView.setAutoFocus(mAutoFocus);
            return true;
        case R.id.menu_formats:
            DialogFragment fragment = FormatSelectorDialogFragment.newInstance(this, mSelectedIndices);
            fragment.show(getSupportFragmentManager(), "format_selector");
            return true;
        case R.id.menu_camera_selector:
            mScannerView.stopCamera();
            DialogFragment cFragment = CameraSelectorDialogFragment.newInstance(this, mCameraId);
            cFragment.show(getSupportFragmentManager(), "camera_selector");
            return true;
        default:
            return super.onOptionsItemSelected(item);
    }
}

@Override
public void handleResult(Result rawResult) {
    try {
        Uri notification = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), notification);
        r.play();
    } catch (Exception e) {}
    showMessageDialog("Contents = " + rawResult.getText() + ", Format = " + rawResult.getBarcodeFormat().toString());
}

public void showMessageDialog(String message) {
    DialogFragment fragment = MessageDialogFragment.newInstance("Scan Results", message, this);
    fragment.show(getSupportFragmentManager(), "scan_results");
}

public void closeMessageDialog() {
    closeDialog("scan_results");
}

public void closeFormatsDialog() {
    closeDialog("format_selector");
}

public void closeDialog(String dialogName) {
    FragmentManager fragmentManager = getSupportFragmentManager();
    DialogFragment fragment = (DialogFragment) fragmentManager.findFragmentByTag(dialogName);
    if(fragment != null) {
        fragment.dismiss();
    }
}

@Override
public void onDialogPositiveClick(DialogFragment dialog) {
    // Resume the camera
    mScannerView.resumeCameraPreview(this);
}

@Override
public void onFormatsSaved(ArrayList<Integer> selectedIndices) {
    mSelectedIndices = selectedIndices;
    setupFormats();
}

@Override
public void onCameraSelected(int cameraId) {
    mCameraId = cameraId;
    mScannerView.startCamera(mCameraId);
    mScannerView.setFlash(mFlash);
    mScannerView.setAutoFocus(mAutoFocus);
}

public void setupFormats() {
    List<BarcodeFormat> formats = new ArrayList<BarcodeFormat>();
    if(mSelectedIndices == null || mSelectedIndices.isEmpty()) {
        mSelectedIndices = new ArrayList<Integer>();
        for(int i = 0; i < ZXingScannerView.ALL_FORMATS.size(); i++) {
            mSelectedIndices.add(i);
        }
    }

    for(int index : mSelectedIndices) {
        formats.add(ZXingScannerView.ALL_FORMATS.get(index));
    }
    if(mScannerView != null) {
        mScannerView.setFormats(formats);
    }
}

@Override
public void onPause() {
    super.onPause();
    mScannerView.stopCamera();
    closeMessageDialog();
    closeFormatsDialog();
}

xml:

<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<fragment android:name="com.example.registerbutton.FullScannerFragment"
          android:id="@+id/scanner_fragment"
          android:layout_width="match_parent"
          android:layout_height="match_parent" />

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar"
    android:layout_gravity="top"
    android:minHeight="?attr/actionBarSize"
    android:background="@color/actionbar_opacity"
    app:theme="@style/TransparentToolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
</FrameLayout>
哈特·沃姆

我建议创建一个新的Activity而不是一个Fragment您可以发送数据以及从中接收数据。

对于发送数据,您可以使用startActivityForResult()和optionnaly intent.putData()

为了接收数据,您可以覆盖onActivityResult()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

片段中的条形码扫描仪

来自分类Dev

片段中的条形码扫描仪

来自分类Dev

Android:使用zxing进行条形码扫描并以片段形式返回结果

来自分类Dev

通过使用React Native,Expo扫描条形码来进行Webview Uri重定向

来自分类Dev

条形码扫描损坏

来自分类Dev

我无法使用AVFoundation扫描条形码来了解iOS延迟

来自分类Dev

如何使用zxing扫描条形码并使用jsonp返回?

来自分类Dev

本地扫描UIImage的条形码(即不使用ZBar)

来自分类Dev

使用Zbar或Zxing在各个方向进行条形码扫描

来自分类Dev

在Java中使用Zxing扫描多个条形码

来自分类Dev

使用PyQt5进行条形码扫描

来自分类Dev

获得使用Flutter在iOS上扫描条形码的权限

来自分类Dev

使用Zbar或Zxing在各个方向进行条形码扫描

来自分类Dev

扫描的条形码很少,但很少使用Zxing

来自分类Dev

在Java中使用Zxing扫描多个条形码

来自分类Dev

无法扫描使用 jasperreport 生成的条形码

来自分类Dev

在WebView Android中扫描条形码

来自分类Dev

如何模拟条形码扫描事件

来自分类Dev

从移动网站扫描条形码?

来自分类Dev

我如何使用php验证条形码编号

来自分类Dev

iOS:AVFoundation条形码扫描-更改扫描区域

来自分类Dev

iOS:AVFoundation条形码扫描-更改扫描区域

来自分类Dev

我如何从条形码扫描仪设备获取产品信息

来自分类Dev

将Zxing条形码扫描仪集成到我的android应用中

来自分类Dev

条形码扫描仪仅显示条形码的第一位

来自分类Dev

在iOS 8中扫描条形码并显示条形码

来自分类Dev

如何使条形码扫描仪从数据库中检查条形码编号?

来自分类Dev

如何从C#Winforms中的条形码扫描仪读取条形码值

来自分类Dev

条形码扫描仪仅显示条形码的第一位

Related 相关文章

  1. 1

    片段中的条形码扫描仪

  2. 2

    片段中的条形码扫描仪

  3. 3

    Android:使用zxing进行条形码扫描并以片段形式返回结果

  4. 4

    通过使用React Native,Expo扫描条形码来进行Webview Uri重定向

  5. 5

    条形码扫描损坏

  6. 6

    我无法使用AVFoundation扫描条形码来了解iOS延迟

  7. 7

    如何使用zxing扫描条形码并使用jsonp返回?

  8. 8

    本地扫描UIImage的条形码(即不使用ZBar)

  9. 9

    使用Zbar或Zxing在各个方向进行条形码扫描

  10. 10

    在Java中使用Zxing扫描多个条形码

  11. 11

    使用PyQt5进行条形码扫描

  12. 12

    获得使用Flutter在iOS上扫描条形码的权限

  13. 13

    使用Zbar或Zxing在各个方向进行条形码扫描

  14. 14

    扫描的条形码很少,但很少使用Zxing

  15. 15

    在Java中使用Zxing扫描多个条形码

  16. 16

    无法扫描使用 jasperreport 生成的条形码

  17. 17

    在WebView Android中扫描条形码

  18. 18

    如何模拟条形码扫描事件

  19. 19

    从移动网站扫描条形码?

  20. 20

    我如何使用php验证条形码编号

  21. 21

    iOS:AVFoundation条形码扫描-更改扫描区域

  22. 22

    iOS:AVFoundation条形码扫描-更改扫描区域

  23. 23

    我如何从条形码扫描仪设备获取产品信息

  24. 24

    将Zxing条形码扫描仪集成到我的android应用中

  25. 25

    条形码扫描仪仅显示条形码的第一位

  26. 26

    在iOS 8中扫描条形码并显示条形码

  27. 27

    如何使条形码扫描仪从数据库中检查条形码编号?

  28. 28

    如何从C#Winforms中的条形码扫描仪读取条形码值

  29. 29

    条形码扫描仪仅显示条形码的第一位

热门标签

归档