I am new to android development I want to show image in another fragment by getting selected image from first activity but I am getting error
this is my grid view where user selects image
@Override
public void onGridImageSelected(Photo photo, int activityNumber) {
Log.d(TAG, "onGridImageSelected: selected an image gridview: " + photo.toString());
FullScreenProductFragment fragment = new FullScreenProductFragment();
Bundle args = new Bundle();
args.putParcelable(getString(R.string.photo), photo);
args.putInt(getString(R.string.activity_number), activityNumber);
fragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.Profilecontainer, fragment);
transaction.addToBackStack(getString(R.string.view_post_fragment));
transaction.commit();
}
this is were the selected image should view
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmentfullscreenlayout, container, false);
mImageView = view.findViewById(R.id.zoom_image);
Bundle bundle = getActivity().getIntent().getExtras();
UnivarsalImageLoader.setImage(getPhotoFromBundle().getImage_path(),mImageView, null, "");
Log.d(TAG, "onCreateView: getphoto from bundle"+getPhotoFromBundle().getImage_path());
return view;
}
private Photo getPhotoFromBundle(){
Log.d(TAG, "getPhotoFragment: argumentd"+getArguments());
Bundle bundle = this.getArguments();
if (bundle != null){
return bundle.getParcelable(getString(R.string.photo));
}else {
return null;
}
}
this is my log
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.alpha.lapid.models.Photo.getImage_path()' on a null object reference
at com.example.alpha.lapid.Utils.FullScreenProductFragment.onCreateView(FullScreenProductFragment.java:56)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2346)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.j va:1428)
when I log this getphotobundle in fragment I am not getting any thing where is the problem please tell me
05-20 08:52:23.534 668-668/com.example.alpha.lapid
D/FullScreenProductFragme: getPhotoFragment: argumentdBundle[{}]
I solved by calling this in my main activity were I was calling fragment if you are trying to get all photo details of selected image you can use this code else you want single image use my friend greenapps code on
public class Profile_Activity extends AppCompatActivity implements
ProfileFragment.OnGridImageSelectedListner ,
ViewPostFragment.OnCommentThreadSelectedListener,
ViewProfileFragment.OnGridImageSelectedListner,
ViewPostFragment.Ontiemlistner{
private static final String TAG = "ProfileActivity";
@Override
public void ontimlistner(Photo photo) {
Bundle args = new Bundle();
FullScreenProductFragment fragment = new FullScreenProductFragment();
args.putParcelable("large", photo);
fragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.full_screen_container, fragment);
transaction.addToBackStack(getString(R.string.fragment_full_screen_product));
transaction.commit();
}
@Override
public void onCommentThreadSelectedListener(Photo photo) {
ViewCommetFragment fragment = new ViewCommetFragment();
Bundle args = new Bundle();
args.putParcelable(getString(R.string.photo), photo);
fragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.Profilecontainer, fragment);
transaction.addToBackStack(getString(R.string.view_comments_fragment));
transaction.commit();
}
@Override
public void onGridImageSelected(Photo photo, int activityNumber) {
Log.d(TAG, "onGridImageSelected: selected an image gridview: " + photo.toString());
ViewPostFragment fragment = new ViewPostFragment();
Bundle args = new Bundle();
args.putParcelable(getString(R.string.photo), photo);
args.putInt(getString(R.string.activity_number), activityNumber);
fragment.setArguments(args);
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.Profilecontainer, fragment);
transaction.addToBackStack(getString(R.string.view_post_fragment));
transaction.commit();
}
and I called it in fragment where I want that image to shown
public FullScreenProductFragment(){
super();
setArguments(new Bundle());
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragmentfullscreenlayout, container, false);
mImageView = view.findViewById(R.id.zoom_image);
Bundle bundle = this.getArguments();
photo = getPhotoFromBundle();
setProduct();
return view;
}
public Photo getPhotoFromBundle(){
Log.d(TAG, "getPhotoFragment: argumentd"+getArguments());
Bundle bundle = this.getArguments();
if (bundle != null){
return bundle.getParcelable("large");
}else {
return null;
}
}
this code in fragment where i added on click listener on that grid view
public interface Ontiemlistner{
void ontimlistner(Photo photo);
}
Ontiemlistner ontiemlistner;
public ViewPostFragment(){
super();
setArguments(new Bundle());
}
added this code in my gridon item click listener
Photo = mPhoto;
ontiemlistner.ontimlistner(mPhoto);