【问题标题】:cannot resolve putextra method无法解析 putextra 方法
【发布时间】:2019-08-01 08:48:52
【问题描述】:

我正在尝试通过 recyclerView 中的意图将图像从数组列表一个活动发送到另一个活动。但在 putextra 方法中,它显示错误,例如无法解析方法 'putextra(java.lang.string,android.widget.imageview)'

 holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ImageView img = images.get(position);
            Intent intent = new Intent(context,Result.class);
            intent.putExtra("Image",img);
            context.startActivity(intent);
        }
    });

【问题讨论】:

  • 我们不能使用意图传递任何视图,如果您想发送图像,那么您可以使用意图发送图像 uri、文件或 url 并在第二个活动中获取它

标签: android android-intent


【解决方案1】:

您不能将 ImageView 作为额外的对象传递,您传递的对象必须是 Parcelable 或 Serialiazable。

您的 ImageView 也仅与此活动相关。如果您尝试将图像发送到另一个活动,最好发送图像的路径。

【讨论】:

  • 你能解释一下parcelable object
  • Zohaib 兄弟有一个图像数组列表,我想根据位置只发送一张图像,请帮助我
  • 如果您有图像的路径或资源 ID,请改为发送。在此处阅读有关 parcelable 的信息:stackoverflow.com/a/49252418/3266367
  • @AwaisAslam 这个 ArrayList 是从哪里加载的?这些图片来自哪里?
  • 另外,看看this answer 发送可绘制的意图(但不推荐)
【解决方案2】:

你不能直接发送image,因为intent不支持

试试这个解决方案

您可以使用ByteArray 发送image,例如

holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            ImageView img = images.get(position);
            img.buildDrawingCache();
            Bitmap bmp = ((BitmapDrawable)img.getDrawable()).getBitmap();
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
            byte[] byteArray = stream.toByteArray();
            Intent intent = new Intent(this, Result.class);
            intent.putExtra("Image", byteArray);
            context.startActivity(intent);
        }
    });

结果活动类

onCreate()
Bundle extras = getIntent().getExtras();
byte[] byteArray = extras.getByteArray("Image");
//convert it to bitmap again
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
ImageView image = (ImageView) findViewById(R.id.imageView1);
//set image to bitmap
image.setImageBitmap(bmp);

来源 Passing image from one activity another activity

【讨论】:

  • 我试过了,但它在“imageView img=images.get(position)”处崩溃了应用程序
  • 你能告诉我其他方式吗,基本上我正在尝试将选择的图像从回收站视图发送到其他活动
  • 发布你的回收器适配器和活动类以及 POJO 类
【解决方案3】:

最后我终于做到了,您只需创建一个图像数组(注意:不要创建 arrayList),以防您想在多个图像之间进行选择,并简单地将这些图像传递给一个整数。下面是代码...

public void onBindViewHolder(MyViewHolder holder, final int position) {

    holder.image.setImageResource(images[position]);

    holder.itemView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            int img = images[position];

            Intent intent = new Intent(context,Result.class);
            intent.putExtra("Images", img);
            intent.putExtra("personName", Name);
            intent.putExtra("Gender", Gender);
            context.startActivity(intent);
        }
    });
}

//在目标活动中

public void getdata(){

    if (getIntent().getExtras() !=null) {

        gender = getIntent().getStringExtra("Gender");
        Name = getIntent().getStringExtra("personName");
        int image = getIntent().getIntExtra("Images",0);
        mytext(gender,Name,image);
    }
}
public void mytext(String gender,String Name,int img){
    textView1 = findViewById(R.id.txt1);
    textView2 =findViewById(R.id.txt2);
    imageView = findViewById(R.id.Imagename);
    textView1.setText(Name);
    textView2.setText(gender);
    imageView.setImageResource(img);
}

//然后在onCreate方法中调用“getdata();”

【讨论】:

    猜你喜欢
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    • 2015-06-10
    • 2019-08-28
    • 2019-10-10
    • 2019-06-13
    相关资源
    最近更新 更多