不使用RecyclerView.Adapter内的onActivityResult

Bog*_*iel 4 android android-studio

我在适配器内有一个按钮进入图库:

    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) {
        }
    }
..
    }
Run Code Online (Sandbox Code Playgroud)

我想要做的是使用从库中选择的图像更新ImageView,但为了做到这一点,我必须使用onActivityResult并且编译器正在抱怨method onActivityResult is never usedcannot resolve method onActivityResult.

我怎么能这样做?

Geo*_*gan 10

请注意这一行你要Activity用来打电话startActivityForResult:

((Activity) context).startActivityForResult();
Run Code Online (Sandbox Code Playgroud)

onActivityResult(...)是一个回调方法,应该与Activity您以前调用的方法相同startActivityForResult().

您收到编译器错误,因为没有这样的方法来覆盖named onActivityResult(...)for RecyclerView.Adapter.

编辑:

既然你问过如何正确地做到这一点,这里有一个选择.

将以下界面添加到MyAdapter:

public interface OnClickImageListener{
    void onClick();
}
Run Code Online (Sandbox Code Playgroud)

然后让对话框实现该接口.在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);
}
Run Code Online (Sandbox Code Playgroud)

您可以将onActivityResult(...)方法添加到您的方法,Fragment现在将调用它.

要在创建使用此MyAdapter传递Fragment中作为参数传递给构造函数,并引用它作为一个OnClickImageListener这样的适配器点击监听器简单地变为:

imageClickListener.onClick();
Run Code Online (Sandbox Code Playgroud)

另请注意,您可以在onClick()方法中添加索引或其他任何需要知道的内容,以便在返回后使用适配器中的哪个项目填充图像.