如何将图像视图传递给另一个布局并将其保存在布局中?

时间:2017-02-04 09:52:17

标签: java android android-sharedpreferences

我能够将图像视图传递到另一个布局,但是一旦我关闭应用程序或更改布局并使用传递的图像视图返回布局。图像视图消失。我的问题是如何将图像视图保留在传递的布局中?这是我在网上找到的传递图像视图的内容。

FirstClass.java

RandomImageHere.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Intent intent = new Intent(getApplicationContext(), SecondClass.class);

            intent.putExtra("resourseInt", R.drawable.picture);
            startActivity(intent);

        }
    });

SecondClass.java

private ImageView imageView;

Bundle extras = getIntent().getExtras();
  imageView = (ImageView) findViewById(R.id.image_view);

    if (extras == null)
    {
        return;
    }
    int res = extras.getInt("resourseInt");
    imageView.setImageResource(res);

SecondClass.xml

<ImageView
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:id="@+id/image_view"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />

5 个答案:

答案 0 :(得分:1)

从Intent

中提取后,您可以将图像资源保存在SharedPreferences中
PreferenceManager.getDefaultSharedPreferences(this).edit()
            .putInt("iv", res).commit();

然后在onResume()方法

int r = PreferenceManager.getDefaultSharedPreferences(this)
.getInt("iv", R.mipmap.ic_launcher);

imageView.setImageResource(r);

答案 1 :(得分:1)

您可以将资源ID保存到sharedpreference:

private ImageView imageView;
SharedPreference savedImage;

在您的OnCreate方法中:

OnCreate(){
.....savedImage = PreferenceManager.getDefaultSharedPreferences(this);
}

然后根据首选项设置图像:

Bundle extras = getIntent().getExtras();
  imageView = (ImageView) findViewById(R.id.image_view);

    if (extras == null)
    {
        return;
    }
    else{
        int res = extras.getInt("resourseInt");
        savedImage.edit().putInt("ImageID", res).apply();
        if(savedImage.contains("ImageID"){
            imageView.setImageResource(savedImage.getInt("ImageId", 0));
        }
    }

答案 2 :(得分:1)

  

我能够将图像视图传递到另一个布局,但是一旦我关闭应用程序或更改布局并使用传递的图像视图返回布局。图像视图消失。

您采用了错误的解决方案。如果您要将数据从活动FirstClass传递到 - &gt; SecondClass并要求在下次没有意识到FirstClass的情况下访问该数据,然后您应该将该特定信息保存在存储中。您可以使用SharedPreferences来实现此目的:

FirstClass

RandomImageHere.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        SharedPreferences pref = getSharedPreferences("Images", Context.MODE_PRIVATE);
        SharedPreferences.Editor ed = pref.edit();
        ed.putInt("IMG", R.drawable.picture);
        ed.apply();
        Intent intent = new Intent(getApplicationContext(), SecondClass.class);
        startActivity(intent);

    }
});

然后在SecondClass

    private ImageView imageView;
    imageView = (ImageView) findViewById(R.id.image_view);
    SharedPreferences pref = getSharedPreferences("Images", Context.MODE_PRIVATE);
    int res = pref.getInt("IMG",0);
    if(res!=0)
    {
        imageView.setImageResource(res);

    }

答案 3 :(得分:1)

在将其添加到intent之前将其转换为Byte数组,将其发送出去并解码。

ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

Intent in1 = new Intent(this, Activity2.class);
in1.putExtra("image",byteArray);

然后在其他活动中写下以下行

byte[] byteArray = getIntent().getByteArrayExtra("image");
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);`enter code here`

答案 4 :(得分:0)

import re

pattern = '(?<={)\d+'
string = 'ab{3,16}'
print re.sub(pattern, '1', string)

和接收者活动

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);     
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); 
byte[] b = baos.toByteArray();

Intent intent = new Intent(this, ActivityB.class);
intent.putExtra("picture", b);
startActivity(intent);