这可能听起来很愚蠢,但我无法绕过它。
我有一个自定义ListAdapter,用图像,文本和其他所有由我的模型构建的东西填充行。现在我希望当你点击该列表中的(任意)图像时,相机应该打开,用户应该可以拍照,然后点击的图像应该显示用凸轮拍摄的图片。得到它?
现在在适配器中我只是做了类似的事情:
public View getView(int position, View convertView, ViewGroup parent) {
...stuff...
ImageView image = (ImageView) elementView.findViewById(R.id.element_image);
image.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
((Activity) context).startActivityForResult(takePicture, 0);
}
...other stuff...
});
我为每个ImageView添加了一个onClick选项,可以打开相机并让用户拍照。 问题是上下文(我的MainActivity)获取方法'onActivityResult'的回调,但我怎么知道哪个回调属于哪个ImageView?
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent)
是否可以在意图中发送引用? 或者它应该如何知道哪个意图调用属于哪个ImageView?
我希望你理解我的问题。否则就问。提前谢谢你;)
答案 0 :(得分:2)
快速简便的解决方案是将position
的{{1}}存储在ListAdapter
中。在您SharedPreference
中,您可以再次提取onActivityResult
,以了解请求了哪一个:
SharedPreference
而不是你的活动结果:
@Override
public void onClick(View v) {
// Store in shared preferences
SharedPreferences sharedPref = getSharedPreferences("FileName",MODE_PRIVATE);
SharedPreferences.Editor prefEditor = sharedPref.edit();
prefEditor.putInt("position_in_adapter",position);
prefEditor.commit();
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
((Activity) context).startActivityForResult(takePicture, 0);
}
编辑:另一种选择是使用您的requestCode作为您的位置。 E.g。
protected void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent){
SharedPreferences sharedPref = context.getSharedPreferences("FileName",MODE_PRIVATE);
// Extract again
int position= sharedPref.getInt("position_in_adapter", -1);
}
并在你的onActivityResult中再次提取它:
startActivityForResult(takePicture, position);