从 ListView 的项目图像中抛出的二维码 reader

QR code reader thrown from an image of an item of a ListView

我希望在按下项目的图像时启动库 zxing 提供的 QR 码 reader。

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

第二个选项一直在第一个和本论坛的一个主题之后,我在主要 class 中得到了我的自定义适配器,我创建了两个方法。

最后一个选项给我语法错误,但是如果你运行: android.content.ActivityNotFoundException:在 android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1659)

未发现 Activity 处理 Intent { act=com.google.zxing.client.android.SCAN(有额外的)}

实际上,这是我的代码:

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

谁能帮帮我?谢谢

在获取视图方法中添加holder.qr.setOnClickListener(new OnImageClickListener());

然后给这个class添加一个内在的class:

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

然后继续将名为 onClick() 的方法添加到 Main activity 并添加代码以调用该方法中的意图

您遇到的与 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);
 }