使用putExtra将视图ID传递给onActivityResult不起作用

时间:2016-01-10 22:13:48

标签: dynamic view onactivityresult

我根据来自api的字段类型动态地向LinearLayout添加视图。

如果字段类型指示' image'我创建了一个图像选择按钮并将其添加到视图中。

我还创建了一个imageview,所以当调用onActivityResult时,我可以将选择的图像分配给该imageview。

然而, 要找到动态创建的imageview,我需要传递某种标识符。

不知何故putExtra()函数没有传递id。

初始变种:

<?php

namespace App\Http\Controllers;

class MyController extends Controller {
    public function __construct() {
        $this->middleware('guest', ['except' => [
            'redirectToFacebook', 'handleFacebookCallback', 'handleFacebookUnlink'
        ]]);
    }
}

动态字段创建:

private static final int SELECT_SINGLE_PICTURE = 101;
public static final String IMAGE_TYPE = "image/*";
private ImageView selectedImagePreview;
protected int tmpviewid;

onActivityResult:

LinearLayout ll = (LinearLayout)findViewById(R.id.linearLayout2);
TextView tmltname = new TextView(NewJobActivity.this);
tmltname.setText(vwa.getName());
ll.addView(tmltname);

Iterator it = attributes.entrySet().iterator();
while (it.hasNext()) {
    if(val.getType().equals("image") ) {
        Button btn = new    Button(NewJobActivity.this);
        btn.setText(R.string.select_picture);
        ImageView iv = new ImageView(NewJobActivity.this);
        iv.setId(View.generateViewId());
        tmpviewid = iv.getId();

        btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
                Intent intent = new Intent();
                intent.setType(IMAGE_TYPE);
                intent.setAction(Intent.ACTION_GET_CONTENT);
                intent.putExtra("imageid",  tmpviewid);

                startActivityForResult( Intent.createChooser( intent, getString(R.string.select_picture)), SELECT_SINGLE_PICTURE );
            }
        });

        ll.addView(btn);
        ll.addView(iv);
}

图像选择正在运行并且已填充selectedImageUri,但为什么data.getIntExtra没有检索传递的myviewid? (它总是得到默认值-1但是tmpviewid得到有效的id&#39; s(1,2,3等......))

所有已接受的解决方案都表明我的代码应该有效。

也许还有其他事情发生了?

或者我可能走错了路?

我注意到其他地方的get-和setTag可能也是一个解决方案..但我仍然需要以某种方式传递它。

1 个答案:

答案 0 :(得分:0)

好的,现在我得到了照片;)

你不能传递自定义的额外参数,你可以,但被调用的活动不会使用它。当返回到调用者时,它将仅发送活动的可用额外结果...

如果您在Manifest中将Activity设置为SingleInstance,则不会在结果上重新创建它,因此您可以添加公共类变量“public static int referImage = 0”并使用单击的ID在按钮单击上设置它。然后当你得到结果时,你将在这个变量上有图像id引用。

VAADIN

如果这个解决方案有效,我不会感到害羞,但是这种定制的Extra cannob会以这种方式解决。

让我知道,我会尝试另一种方式。

示例:

 btn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View arg0) {
            referImage = tmpviewid;
            ....

当用户点击Button时,它将设置referImage = tmpviewid;

当Activity返回Result时,referImage的最后一个值将是Button用户点击。

onActivityResult你只需阅读referImage值。