android进入片段后才启动zxing扫描器

时间:2013-09-13 03:38:00

标签: android android-fragments zxing

我有一个使用SherlockFragment和hamburger菜单的应用程序,由jeremyfeinstein“SlidingMenu” 我的应用程序也使用zxing条码扫描器

当我输入片段时,在片段中我有一个启动条形码扫描器的按钮,

但我需要的是当片段进入时,启动扫描仪, 然后当扫描仪视图被解雇时,不要做任何事情,

问题是现在我有了我的

  

扫描();

里面

  

onCreateView

因此,当扫描仪被解雇时,它会再次发射,

这里有一些代码,

在PhoneMenuList.java中

,片段被调用:

private void switchFragment(Fragment fragment, int index) {
    if (getActivity() == null)
        return;
    /*
              // doesnt work
    if (newContent instanceof PhoneValidateView) {
        ((PhoneValidateView) newContent).scan();
    }
    */

    MainActivityPhone change = (MainActivityPhone) getActivity();
    change.switchContent(newContent);       
}

然后在PhoneValidateView.java

     public class PhoneValidateView extends SherlockFragment{

     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
                scan();

}
 ... }

那么如何在表格加载片段时显示“scan()”?不是每次都出现片段吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

向您的片段添加状态,并且仅在处于初始状态时调用scan()

private boolean mScannerLaunched = false;

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    // ...
    mScannerLaunched = savedInstanceState != null && savedInstanceState.getBoolean("mScannerLaunched", false);
    if (!mScannerLaunched) {
        scan();
        mScannerLaunched = true;
    }
}

public void onSaveInstanceState(Bundle state) {
    super.onSaveInstanceState(state);
    state.putBoolean("mScannerLaunched", mScannerLaunched);
}