ZXING Android嵌入式IntentIntegrator的用法

时间:2015-09-29 19:59:31

标签: java android android-intent android-studio zxing

我是Android开发的新手,仍然试图掌握一些概念。我发现最好的学习方法是通过项目直接进入深层。话虽如此,这是我的问题:

我已将ZXing Android Embedded集成到我的应用程序中;但是,我无法理解您使用IntentIntegrator的方式。我正在尝试做的就是当用户点击按钮时将QR扫描仪调到屏幕上。我一直在尝试按照他们的github链接[这里] [1]的说明,但一直没有成功。

到目前为止,这是我的功能:

    button.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            IntentIntegrator integrator = new IntentIntegrator(this);
            IntentIntegrator.forFragment(this).initiateScan();

        }

    });

我不断收到错误说:

  

错误:(109,25)错误:类中的构造函数IntentIntegrator   IntentIntegrator不能应用于给定的类型;必需:活动   发现:意图原因:实际参数Intent无法转换为   方法调用转换的活动

另外,当我把鼠标放在'(这)'在Android Studio中,它说:

  

匿名android.view.View.onClickListener

非常感谢任何帮助,谢谢!如果您需要任何其他信息,请告诉我。

3 个答案:

答案 0 :(得分:1)

比ChrisStillwell更简单的解决方案是让你的activity- / fragment-class实现OnClickListener,这样你就不需要引用变量了:

public class SomeFragment extends Fragment implements View.OnClickListener {
    // Rest of your code

    @Override
    public void onClick(View v) {

         if (v.getId == button.getId) {
              IntentIntegrator integrator = new IntentIntegrator(getActivity());
              IntentIntegrator.forFragment(this).initiateScan();
         }
    }
}

如果您要实现片段类,请注意在创建getActivity()时必须致电IntentIntegrator

答案 1 :(得分:0)

当您在OnClickListener内说Fragment时,您引用的是this,而不是onClick。您需要引用Fragment,最简单的方法是设置一个全局变量,并根据自己的喜好调用它myFragment,然后分配this。例如:

Fragment myFragment = this;

public void myFunction(){
    // Code and stuff //
    button.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View arg0) {
            IntentIntegrator integrator = new IntentIntegrator(this);
            IntentIntegrator.forFragment(myFragment).initiateScan();
        }
    });
}

答案 2 :(得分:0)

以下可以工作:

btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                new IntentIntegrator(getActivity()).initiateScan();
                popupWindow.dismiss();

            }
        });