2016-11-08 3 views
0

Я хочу передать view, чтобы обновить мой view в другой деятельности. Это мой код для прохождения view.Проходящий взгляд с намерением

emp_photo_edit.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
       i.putExtra("container", (Serializable) viewDialog); 
       ((EmployeeActivity)context).startActivityForResult(i, 2017); 
      } 
     }); 

Тогда я хочу, чтобы обновить свой вид в другой деятельности

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 2017 && resultCode == RESULT_OK && null != data) { 
     Uri selectedImage = data.getData(); 
     String[] filePathColumn = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = getContentResolver().query(selectedImage,filePathColumn, null, null, null); 
     cursor.moveToFirst(); 
     int columnIndex = cursor.getColumnIndex(filePathColumn[0]); 
     String picturePath = cursor.getString(columnIndex); 
     cursor.close(); 
     View apa = (View) data.getSerializableExtra("content"); 
     //View dialog = View.inflate(getApplicationContext(),R.layout.dialog_employee_edit,null); 
     ImageView imageView = (ImageView) apa.findViewById(R.id.emp_photo_edit); 
     imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); 
    } 
} 

Но показать исключение.

FATAL EXCEPTION: main 
    java.lang.ClassCastException: android.widget.LinearLayout cannot be cast to java.io.Serializable 
    at com.fingerspot.hz07.revocloud.adapter.EmployeeAdapter$MyViewHolder$5.onClick(EmployeeAdapter.java:334) 
    at android.view.View.performClick(View.java:4084) 
    at android.view.View$PerformClick.run(View.java:16966) 
    at android.os.Handler.handleCallback(Handler.java:615) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4745) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
    at dalvik.system.NativeStart.main(Native Method) 
+0

просмотров не могут быть переданы от одного 'Activity' к другому. –

ответ

3

Аргументы, передаваемые в пачке должны реализовать интерфейс в Serializable или Parcelable. LinearLayout нет. Лучшим решением является передача данных внутри представления в намерение и применение этого вида к представлению при приеме Activity

+0

но, я хочу обновить этот вид в другой деятельности, могу ли я сделать это? – Huzain

+0

Да, вы должны передать необходимые вам атрибуты и применить их к виду в другом действии –

+0

У меня есть изображение, которое я должен обновить в другом действии, как это сделать? – Huzain

0

Вы не можете передать представление (изображение) в намерении.

Вы должны передать растровое изображение изображения как ByteArray или Parcelable в намерении, как показано ниже.

Pass растровые, как ByteArray:

сначала преобразовать изображение в ByteArray, а затем перейти в Намерение и в следующей деятельности получает ByteArray от Bundle и преобразовать в изображение (Bitmap) и установить в ImageView.

Преобразовать Bitmap в ByteArray и перейти в Intent: -

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 

Intent intent = new Intent(this, NextActivity.class); 
intent.putExtra("picture", byteArray); 
startActivity(intent); 

Получить ByteArray из Bundle и конвертировать в Bitmap изображения: -

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

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

image.setImageBitmap(bmp); 

ИЛИ

P задница растровый, как Parcelable:

Pass Bitmap непосредственно в Intent, как Parcelable дополнительной и получить растровое изображение как Parcelable дополнительно в следующей деятельности от Bundle, но проблема в том, если ваш размер Bitmap/Изображение большой в то время изображение не загружается в следующей деятельности.

заказ get ImageView's image and send it to an activity with Intent