RecyclerView.Adapter中的onActivityResult未被使用

6

我有一个按钮,位于适配器内部,用于进入画廊:

    MyAdapter extends
            RecyclerView.Adapter<RecyclerView.ViewHolder> {
    ...
    onClic..{
        Intent intent = new Intent(
                                    Intent.ACTION_PICK,
                                    android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                            intent.setType("image/*");
                            ((Activity) context).startActivityForResult(
                                    Intent.createChooser(intent, "Select File"),
                                    SELECT_FILE);}
    ....
 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == RESULT_OK) {
        }
    }
..
    }

我想做的是从图库中选择图片并更新ImageView,但为了实现这一点,我必须使用onActivityResult方法。编译器报错“method onActivityResult is never used”和“cannot resolve method onActivityResult”。请问该如何解决?

你尝试过移除 super.onActivityResult(requestCode, resultCode, data) 吗? - Pratik Tank
是的,但它仍然显示该方法未被使用。 - Bogdan Daniel
1个回答

12

请注意,在此行中您正在使用 Activity 调用 startActivityForResult

((Activity) context).startActivityForResult();

onActivityResult(...) 是一个回调方法,应该在您用于调用 startActivityForResult() 的相同 Activity 中。

你会遇到编译错误,因为没有名为 onActivityResult(...) 的要重写的方法适用于 RecyclerView.Adapter

编辑:

由于您询问如何正确执行此操作,这里有一种方法。

将以下接口添加到 MyAdapter

public interface OnClickImageListener{
    void onClick();
}

接着让您的对话框实现该接口。在 onClick 方法中执行以下操作:

@Override
public void onClick() {
    Intent intent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    intent.setType("image/*");
    startActivityForResult(
           Intent.createChooser(intent, "Select File"), SELECT_FILE);
}

你可以在你的Fragment中添加onActivityResult(...)方法,它现在将被调用。

当你创建MyAdapter时,将 Fragment 作为参数传递给构造函数,并将其引用为 OnClickImageListener,这样你在适配器中的点击监听器就变成了:

imageClickListener.onClick();

另外请注意,您可以向 onClick() 方法添加索引,或者其他您需要知道哪个适配器项目来填充图像的内容,一旦它被返回。


我使用 ((Activity) context) 是因为否则会出现错误。我知道为什么会出现这些错误,但我该怎么办呢?整个项目中只有一个活动,其余都是片段。我该如何实现我在问题中所解释的内容? - Bogdan Daniel
我的RecyclerView被填充在一个DialogFragment中。 - Bogdan Daniel
MyAdapter呢?它和DialogFragment在同一个.java文件中吗? - George Mulligan
我不能在没有上下文的情况下调用它,因为它会抱怨说它无法识别该方法。不,它有自己的文件。 - Bogdan Daniel
1
好的,这回答了内部类的问题,也解释了为什么它无法访问该方法。您可以使用活动将所选图像转发到“Fragment”,或将托管“RecyclerView”的片段传递给适配器,以便在片段上调用“onActivityResult(...)”。 - George Mulligan
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接