In main fragment i have viewpager so i created view pager adapter :
public class ParkingViewPagerAdapter extends FragmentPagerAdapter {
private String cookie;
private final String taskInfoString;
public ParkingViewPagerAdapter(FragmentManager fm,String cookie, String taskInfoString) {
super(fm);
this.cookie = cookie;
this.taskInfoString = taskInfoString;
}
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return Fragment1.newInstance(cookie,taskInfoString);
case 1:
return Fragment2.newInstance(cookie,taskInfoString);
}
return null;
}
In fragment1 i created a callback and made a setter for initialize callback:
public interface Callback{
void onRowClicked(Object item);
}
public void setCallback(Callback callback) {
this.callback = callback;
}
Now in main fragment after created adapter i got fragment1 in this way:
Fragment1 fragment1 =
(Fragment1) parkingViewPagerAdapter.getItem(0);
fragment1.setCallback(item -> {
Log.i("", "loggggg: ");
});
In debug mode first callback variable is initialized but in fragmet1 i have a list view when i clicked on my item :
listAdapter.setListener(item ->{
callback.onRowClicked(item);
}}
callback
is null !!! Why callback is null ?If it was not null before.
parkingViewPagerAdapter.getItem(0) return a new fragment?
Yes, your assumption is correct. parkingViewPagerAdapter.getItem(0) returns a new fragment. As far as I can see at
@Override
public Fragment getItem(int i) {
switch (i) {
case 0:
return Fragment1.newInstance(cookie,taskInfoString);
case 1:
return Fragment2.newInstance(cookie,taskInfoString);
}
return null;
}
you return a new instance every time when you invoke getItem
method. So even if you add a callback by using setter, every time when you change your page in viewpager, a new instance of fragment will be created. So, that's why you're getting NPE.