在视图中实现方法 startActivityForResult
Posted
技术标签:
【中文标题】在视图中实现方法 startActivityForResult【英文标题】:implement a method startActivityForResult in a view 【发布时间】:2016-01-11 13:33:01 【问题描述】:我有一个 ListView,每个项目都有两张图片,希望你点击其中一张我用 zxing 读取 QR 码。
我在调用 startActivityForResult 方法时遇到错误,并且不知道哪个方法可以替换它或如何替换它。 我留下一些代码: 我的持有人班
public class ObrasHolder
public ImageView foto;
public TextView num, iden, ubi,hombres,material,equipo;
public RelativeLayout fondo;
public TextView eq1, eq2, eq3, eq4;
public TextView g1,g2,g3,g4;
public ImageView cam,qr;
我的自定义适配器:
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.foto = (ImageView) item.findViewById(R.id.imgAnimal);
holder.num = (TextView) item.findViewById(R.id.numC);
holder.iden = (TextView) item.findViewById(R.id.idenC);
holder.ubi = (TextView) item.findViewById(R.id.ubiC);
holder.hombres = (TextView) item.findViewById(R.id.homC);
holder.material = (TextView) item.findViewById(R.id.matC);
holder.eq1 = (TextView) item.findViewById(R.id.eq1);
holder.eq2 = (TextView) item.findViewById(R.id.eq2);
holder.eq3 = (TextView) item.findViewById(R.id.eq3);
holder.eq4 = (TextView) item.findViewById(R.id.eq4);
holder.g1 = (TextView) item.findViewById(R.id.g1);
holder.g2 = (TextView) item.findViewById(R.id.g2);
holder.g3 = (TextView) item.findViewById(R.id.g3);
holder.g4 = (TextView) item.findViewById(R.id.g4);
holder.fondo = (RelativeLayout) item.findViewById(R.id.fondobra);
holder.cam = (ImageView) item.findViewById(R.id.cam);
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)
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0); //Error because is undefined for the type new View.OnClickListener()
);
return item;
public void onActivityResult(int requestCode, int resultCode, Intent intent)
if (requestCode == 0)
if (resultCode == RESULT_OK)
String contents = intent.getStringExtra("SCAN_RESULT");
// Handle successful scan
else if (resultCode == RESULT_CANCELED)
// Handle cancel
有办法解决吗?
我也给出了另一个错误。在方法 onActivityResult。 谢谢!!
【问题讨论】:
【参考方案1】:尝试将其添加到持有适配器的 Activity:
public void onActivityResult(int requestCode, int resultCode, Intent intent)
if (requestCode == 0)
if (resultCode == RESULT_OK)
String contents = intent.getStringExtra("SCAN_RESULT");
// Handle successful scan
else if (resultCode == RESULT_CANCELED)
// Handle cancel
【讨论】:
您好,非常感谢。那个方法最后放到了我自定义适配器的类里,你说是放在holder类里? 是的,在适配器的上下文中。 我想我不明白你……你说这个?public ObrasAdapter(Context context, ArrayList<Obra> datos) super(context, R.layout.listview_item, datos); this.context = context; this.datos = datos; public void onActivityResult(int requestCode, int resultCode, Intent intent)
没有。您使用 ObrasAdapter 作为 ListView 的适配器,对吗?您应该将您的 onActivityResult 方法放在承载此 ListView 的活动中。
所有这些问题都与您最初的问题无关。我建议你创建一个新问题。【参考方案2】:
它未定义,因为系统正在寻找setOnClickListener
context 中的方法。您应该为其提供全局上下文。
您有上下文变量,但这还不够,您应该尝试使用 Activity 类型包装上下文。
((Activity)context).startActivityForResult(intent, 0);
这对你有用,但只要确保当你将上下文传递给构造函数时,你使用 this
关键字将活动上下文传递给它。
【讨论】:
谢谢,但它说:活动无法解析为类型 它的意思,确保你已经导入了这个语句:import android.app.Activity; 现在执行时出现错误:` android.content.ActivityNotFoundException: No Activity found to handle Intent act=com.google.zxing.client.android.SCAN (has extras) at android .app.Instrumentation.checkStartActivityResult(Instrumentation.java:1659)` 我在论坛上找到了这个但不太明白它们的意思:[链接] (***.com/questions/16970356/...) 它现在与您发布的问题无关。这与您的意图有关。您正在寻找未安装在手机中或您的应用程序无法找到的活动。确保您已安装此应用程序,您正在将您的意图定向到该应用程序。您可以在这里下载最新的zxing扫描应用,github.com/zxing/zxing/releases以上是关于在视图中实现方法 startActivityForResult的主要内容,如果未能解决你的问题,请参考以下文章
您是不是在同一个 prepareForSegue 方法中为一个视图控制器的所有 segue 实现行为?