ZXING Android嵌入式IntentIntegrator的用法

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

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

这是我的function到目前为止的样子:

button.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { IntentIntegrator integrator = new IntentIntegrator(this); IntentIntegrator.forFragment(this).initiateScan(); } }); 

我一直收到错误说:

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

此外,当我将鼠标放在Android Studio中的’(this)’时,它说:

匿名的android.view.View.onClickListener

任何帮助将不胜感激,谢谢! 如果您需要任何其他信息,请告诉我。

当你在onClickthis时,你正在引用你的OnClickListener而不是你的Fragment 。 你需要引用你的Fragment ,最简单的方法就是设置一个全局变量并将其myFragment或者你喜欢的东西,然后分配它。 例如:

 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(); } }); } 

比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(); } } } 

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

以下可以工作:

 btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { new IntentIntegrator(getActivity()).initiateScan(); popupWindow.dismiss(); } });