2017-02-04 1 views
0

Мне удалось передать изображение на другой макет, но как только я закрою приложение или изменю макет и вернусь к макету с переданным представлением изображения. Изображение исчезнет. Мой вопрос в том, как сохранить изображение в макете, которое оно было передано тоже? Вот что я нашел онлайн для просмотра изображений.Как передать изображение Просмотр другого макета и сохранить его внутри макета?

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" /> 

ответ

1

Я был в состоянии передать вид изображения на другую раскладку, но как только я закрыть приложение или изменить макет и вернуться к макет с пропущенным представлением изображения. Изображение исчезнет.

Вы принимаете неправильное решение. Если вы передаете данные из Activity FirstClass в ->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); 

    } 
+0

Большое спасибо! Сегодня я узнал что-то новое – Sean

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

и приемник активность

Bundle extras = getIntent().getExtras(); 
byte[] b = extras.getByteArray("picture"); 

Bitmap bmp = BitmapFactory.decodeByteArray(b, 0, b.length); 
ImageView image = (ImageView) findViewById(R.id.imageView1); 

image.setImageBitmap(bmp); 
+0

Как это решить проблему? – OBX

+0

http: // stackoverflow.com/a/8407644/4427519 –

+0

Я попробую и посмотрю, если его работы – Sean

1

вы можете сохранить ресурс изображения в SharedPreferences после извлечения из Intent

PreferenceManager.getDefaultSharedPreferences(this).edit() 
      .putInt("iv", res).commit(); 

затем в onResume метод()

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

imageView.setImageResource(r); 
1

Вы можете сохранить свой идентификатор ресурса в 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)); 
     } 
    } 
1

Преобразовать его в массив байтов, прежде чем добавить это с намерением, отправить его и декодировать.

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` 
+0

http://stackoverflow.com/questions/11010386/send-bitmap-using-intent-android – Pratik

Смежные вопросы