不使用RecyclerView.Adapter内的onActivityResult

时间:2016-02-06 16:43:32

标签: 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) {
        }
    }
..
    }

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

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:10)

请注意,此行您使用Activity来致电startActivityForResult

((Activity) context).startActivityForResult();

onActivityResult(...)是一种回调方法,应该与您用来调用Activity的{​​{1}}相同。

您收到编译器错误,因为没有此方法可以覆盖startActivityForResult()的名为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); } 方法添加到onActivityResult(...),现在可以调用它。

要在创建Fragment时将MyAdapter作为参数传递给构造函数并将其作为Fragment引用,以便适配器中的单击侦听器变为:

OnClickImageListener

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