2016-11-08 5 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

引数はSerializableParcelableインタフェースを実装する必要があります。 LinearLayoutはありません。最良の解決策は、ビュー内のデータをインテントに渡して受信側のビューに適用することです。Activity

+0

しかし、別のアクティビティでそのビューを更新したいと思いますか? – Huzain

+0

はい、必要な属性を渡して、他のアクティビティのビューに適用する必要があります –

+0

私は別のアクティビティで更新する必要があるimageviewを持っています。 – Huzain

0

ビュー(画像ビュー)をインテントで渡すことはできません。

ByteArrayまたはParcelableというイメージビットマップを次のように渡す必要があります。

のByteArrayとして

パスビットマップ:

まずByteArrayに画像を変換した後、テントの中に入ると、次のアクティビティでBundleからByteArrayを取得し、画像(ビットマップ)に変換し、ImageViewに設定してください。

ByteArrayから

変換BitmapIntentに渡す: - BundleからByteArrayを取得し、Bitmap画像に変換

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

: -

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

OR

P Parcelableとしてお尻のビットマップ:

パスBitmap直接余分Parcelableとしてテントの中へとBundleから次のアクティビティに余分なParcelableとしてビットマップを取得しますが、あなたのビットマップ/画像サイズはその時の画像が読み込まれていない大きさである場合、問題があります次回の活動で

アウト get ImageView's image and send it to an activity with Intent

関連する問題