【问题标题】:Intent on imageview in recyclerView AdapterrecyclerView 适配器中的图像视图意图
【发布时间】:2017-07-12 20:58:01
【问题描述】:

我在 RecyclerView 中遇到了有关意图的问题。 我只想关注我的 RecyclerView 中的 1 个 imageView。

错误是:

android.util.AndroidRuntimeException: 调用 startActivity() 从 在 Activity 上下文之外需要 FLAG_ACTIVITY_NEW_TASK 旗帜。这真的是你想要的吗? 在 android.app.ContextImpl.startActivity(ContextImpl.java:1383) 在 android.app.ContextImpl.startActivity(ContextImpl.java:1370) 在 android.content.ContextWrapper.startActivity(ContextWrapper.java:323) 在 example.memories.MyAdapter$ViewHolder$1.onClick(MyAdapter.java:75) 在 android.view.View.performClick(View.java:4871) 在 android.view.View$PerformClick.run(View.java:20365) 在 android.os.Handler.handleCallback(Handler.java:815) 在 android.os.Handler.dispatchMessage(Handler.java:104) 在 android.os.Looper.loop(Looper.java:214) 在 android.app.ActivityThread.main(ActivityThread.java:6102) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823) 07-13 01:55:31.033 20699-29708/example.memories E/NativeCrypto: ssl=0x5578a74560 cert_verify_callback x509_store_ctx=0x7f9844d228 arg=0x0 07-13 01:55:31.033 20699-29708/example.memories E/NativeCrypto:ssl=0x5578a74560 cert_verify_callback 调用 verifyCertificateChain authMethod=ECDHE_RSA

而我的 RecyclerView 适配器代码是:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

    private Context context;
    private List<Upload> uploads;
    Upload upload;

    public MyAdapter(Context context, List<Upload> uploads) {
        this.uploads = uploads;
        this.context = context;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.layout_images, parent, false);
        ViewHolder viewHolder = new ViewHolder(v);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
         upload = uploads.get(position);

       holder.textViewName.setText(upload.getName());

        Glide.with(context).load(upload.getUrl()).into(holder.imageView);
    }

    @Override
    public int getItemCount() {
        return uploads.size();
    }

    class ViewHolder extends RecyclerView.ViewHolder {

        public TextView textViewName;
        public ImageView imageView,shareImage;


        public ViewHolder(View itemView) {
            super(itemView);

           textViewName = (TextView) itemView.findViewById(R.id.textViewName);
            imageView = (ImageView) itemView.findViewById(R.id.imageView);
            shareImage=(ImageView)itemView.findViewById(R.id.share);

            shareImage.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent shareIntent = new Intent();
                    shareIntent.setAction(Intent.ACTION_SEND);
                    shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(upload.getUrl()));
                    shareIntent.setType("image/*");
                   context.startActivity(Intent.createChooser(shareIntent, "Share memories:"));

                }
            });
        }

    }

请指导我。我怎样才能做到这一点?

【问题讨论】:

  • 你传递给这个适配器的上下文是什么?
  • @santalu 在我设置适配器的其他 java 文件中,我正在传递 getApplicationContext
  • 这就是问题所在。不要将getApplicationContext() 传递给您的适配器。只需传递您的活动上下文,您甚至不需要 shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 这样做。
  • 谢谢哥们!问题解决了。!你能再帮我解决一个问题吗?
  • 当然,但请发布另一个问题。

标签: android android-intent android-recyclerview


【解决方案1】:

不要将getApplicationContext() 传递给您的适配器。只需传递您的活动上下文,您甚至不需要 shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 这样做。

使用应用程序上下文时要小心。 我真的建议你阅读Difference between getContext() , getApplicationContext() , getBaseContext() and "this"

【讨论】:

    【解决方案2】:

    在构造 MyAdapter 时传入 Activity 上下文而不是 Application 上下文,或者在调用 context.startActivity 之前添加以下行:

    shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-20
      • 1970-01-01
      • 1970-01-01
      • 2018-06-06
      相关资源
      最近更新 更多