I don't think you can. You can only control the layout of your current activity, along with its components. Since the component isn't on the view of your current Activity (in your case is Gallery), accessing it will throw the NullPointerException. What you can do is, pass the path of the selected image on you Gallery to the Main class then retrieve the image path and set it to your ImageView.
Change Layout through other Activity
-
23-06-2022 - |
سؤال
Is there a way that I can change ImageView of Main.class class through Gallery.class?
my Main class onClick calls the method setImage of Gallery.class
public void setImage(int currentView) {
Log.d("fgdsf","dumaan dito");
this.currentView = currentView;
Intent gallery = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(gallery, RESULT_LOAD_IMAGE);
}
and this is the onActivityResult
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RESULT_LOAD_IMAGE && 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();
LayoutInflater inflater = (LayoutInflater) mActivity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.activity_main, null);
if (currentView == 0) {
ImageView imageView = (ImageView) v
.findViewById(R.id.imageView1);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}
if(currentView==1)
{
ImageView imageView = (ImageView) v
.findViewById(R.id.imageView2);
imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath));
}
}
}
and I get this error
08-07 08:35:08.208: E/AndroidRuntime(15689): Caused by: java.lang.NullPointerException 08-07 08:35:08.208: E/AndroidRuntime(15689): at android.app.Activity.startActivityForResult(Activity.java:3370)
المحلول
نصائح أخرى
I think your best option is to set an interface in Gallery.class, like
public class Gallery extends Activity {
public interface MyClickListener {
public void OnClick();
}
private MyClickListener listener;
Then in your onClick, set your OnClick ( listener.OnClick() ). In Main.class you will have to import 'MyClickListener' and define whatever actions you want to perform.
For capture Image
This is happens from android 4.0 onward
Before it was returning the image uri path, but now it returns Bitmap from gallery.
So to resolve this.
File file = new File(Environment.getExternalStorageDirectory() + "/DCIM/", "image" + new Date().getTime() + ".jpg");
Uri imgUri = Uri.fromFile(file);
String imagepath = file.getAbsolutePath();
final Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imagepath);
startActivityForResult(intent, CAPTURE_IMAGE);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_CANCELED) {
if (requestCode == CAPTURE_IMAGE) {
imgUser.setImageBitmap(BitmapFactory.decodeFile(imagepath);
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
}
For Pick Image From Gallary
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, ""), PICK_IMAGE);
public String getAbsolutePath(Uri uri) {
String[] projection = { MediaColumns.DATA };
@SuppressWarnings("deprecation")
Cursor cursor = managedQuery(uri, projection, null, null, null);
if (cursor != null) {
int column_index = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
} else
return null;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != Activity.RESULT_CANCELED) {
if (requestCode == PICK_IMAGE) {
imgUser.setImageBitmap(BitmapFactory.decodeFile(getAbsolutePath(data.getData()));
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
}