【问题标题】:onActivityResult inside a RecyclerView.Adapter not being used未使用 RecyclerView.Adapter 中的 onActivityResult
【发布时间】:2016-02-07 01:19:13
【问题描述】:

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

    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

我该怎么做呢?

【问题讨论】:

  • 你试过删除 super.onActivityResult(requestCode, resultCode, data);
  • 是的,但是还是说方法没有被使用

标签: android android-studio


【解决方案1】:

请注意,您使用Activity 调用startActivityForResult

((Activity) context).startActivityForResult();

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

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

编辑:

既然您问如何正确地做到这一点,这里是一种选择。

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();

还请注意,您可以将索引添加到 onClick() 方法或您需要知道适配器中的哪个项目在图像返回后填充图像。

【讨论】:

  • 我使用了((Activity) context),因为它在抱怨其他方面。我知道为什么我会收到错误,但是我能做些什么呢?整个项目我只有一项活动,其余的都是片段。我怎样才能实现我在问题中解释的内容?
  • 您的RecyclerView 是使用它的Fragment 的内部类吗?如果是,则直接调用 startActivityForResult(...) 而不使用上下文,并在 Fragment 中覆盖 onActivityResult(...)
  • 我的 RecyclerView 在 DialogFragment 中被膨胀
  • MyAdapter 怎么样?它与DialogFragment 在同一个.java 文件中吗?
  • 好的,那就回答内部类问题,这就是为什么它无法访问该方法。您要么必须使用活动将所选图像转发到Fragment,要么将托管RecyclerView 的片段传递给适配器,以便在片段上调用onActivityResult(...)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2020-11-09
  • 1970-01-01
  • 2015-01-15
  • 2011-09-03
  • 2012-10-14
相关资源
最近更新 更多