2015-10-13 47 views
0

我希望当该项目的图像被按下时启动库zxing提供的QR代码阅读器。从一个ListView项目的图像抛出的QR代码读取器

我测试了两个选项。 第一个选项是我的自定义适配器尝试启动意图。

第二个选项一直跟在这个论坛的第一个主题上,我在主类中得到了一种我自定义的适配器,并且我创建了两种方法。

最后一个选项让我语法错误,但如果你运行: android.content.ActivityNotFoundException:无活动处理意向{行动= com.google.zxing.client.android.SCAN(有演员)}在android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1659)

其实,这是我的代码:

public class Inventario extends Activity implements OnItemClickListener { 
    private ArrayList<Obra> obras; 
    private ListView lvObras; 
    private ObrasAdapter adapter; 
    private TextView num, iden,ubi,hombres,material; 
    private int pulsado = -1; 
    Toast toast1 ; 

    private int operacion = -1; 

    List<String> equiDisp; 
    ArrayList<String> marcado; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.inventario); 

     equiDisp = new ArrayList<String>(); 
     marcado = new ArrayList<String>(); 

     for(int i=1; i<11; i++) 
     { 
      equiDisp.add(String.valueOf(i)); 
     } 

     // Inicializamos las variables. 
     obras = new ArrayList<Obra>(); 

     rellenarArrayList(); 

     actualizarDisplay(); 
    } 

     ... 
    public void abrirLector(){ 
     Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
     intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
     startActivityForResult(intent, 0); 
    } 

    public void actualizarDisplay() 
    { 
     adapter = new ObrasAdapter(this, obras); 
     lvObras = (ListView) findViewById(R.id.lvItems); 
     lvObras.setAdapter(adapter); 
     lvObras.setOnItemClickListener(this); 
    } 

    public class ObrasAdapter extends ArrayAdapter<Obra> { 
     public Context context; 
     private ArrayList<Obra> datos; 

     public void DisplayProjectListAdapter(Context c) { 
     context = c; 
    } 

    public ObrasAdapter(Context context, ArrayList<Obra> datos) { 
     super(context, R.layout.listview_item, datos); 
     this.context = context; 
     this.datos = datos; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View item = convertView; 
     ObrasHolder holder; 

     if (item == null) { 
      item = LayoutInflater.from(context).inflate(R.layout.listview_item, 
       null); 

      holder = new ObrasHolder(); 
      holder.qr = (ImageView) item.findViewById(R.id.qr); 

      item.setTag(holder); 
    } 
    holder = (ObrasHolder) item.getTag(); 

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

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

        abrirLector(); 
      } 
     }); 
     } 
    }); 

    return item; 
} 

谁能帮助我吗?谢谢

+1

此错误对您说的是,在任何应用程序中没有与您的意图匹配的意图过滤器的活动。这是您尝试用startActivity打开意向时出现的错误,但任何人都可以对其进行响应。 – droidpl

+0

我有此在manifiest.xml'<活动 机器人:名称= 机器人 “Inventario。”:标签= “@串/ title_activity_inventario”> <意图滤波器> \t <操作机器人:名称=“COM。 google.zxing.cliet.android.SCAN “/> \t \t <动机器人:名称=” android.intent.category.DEFAULT“/>) \t ' – wiki

+1

在这种情况下,由于这项活动属于你,你为什么不使用明确的意图?尝试'新的意图(上下文,Inventario.class);'而不是调用自定义操作。 – droidpl

回答

1

您所遇到的与ActivityNotFoundException相关的问题可以通过您可以在this link中找到的步骤来解决。这是zxing的官方文档,告诉您如何在他们提供的对话框中打开扫描仪。将其替换为您的代码:

public void abrirLector(){ 
     Intent intent = new Intent("com.google.zxing.client.android.SCAN"); 
     intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); 
     startActivityForResult(intent, 0); 
} 
0

holder.qr.setOnClickListener(new OnImageClickListener());添加到get view方法。

然后,一个内部类添加到这个类:

private class OnImageClickListener implements OnClickListener { 
    @Override 
    public void onClick(View v) { 
     Main sct = (Main) activity; 
     sct.onClick(); 
     return void; 
} 

然后继续前进,添加一个方法叫的onClick()到您的主要活动,并添加代码来调用的意图在于方法

+0

所以我应该是两个“大”类,活动主和自定义适配器。然后在自定义适配器类y中写入类OnImageClickListener,对吗? – wiki

+0

既然你没有为你的适配器提供一个单独的类,那么将'OnImageClickListener'类添加到'ObrasAdapter'中,然后在活动Inventario中实现'onClick()'。 (也可以在上面提供的代码中将'Main'更改为'Inventario'。) –

+0

好吧,我已经分成了两个类,但是我有一个错误,'Inventario sct =(Inventario)活动;' - >活动无法解析给变量 – wiki