如何找出什么意图回调引用什么

时间:2013-04-02 20:18:55

标签: android list android-intent camera adapter

这可能听起来很愚蠢,但我无法绕过它。

我有一个自定义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?

我希望你理解我的问题。否则就问。提前谢谢你;)

1 个答案:

答案 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);