Reputation: 2572
Hi I want to update the view of viewpager's fragment on swipe (something similar to setOffscreenPageLimit = 0 which doesnt work because minimum offset is 1) but I dont know how. I tried with interface but i get nullpointer exception on parts of my view which visibility I try to set:
pager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
((OnRefreshListener) adapter.getItem(position)).onRefresh();
}
@Override
public void onPageScrollStateChanged(int arg0) {}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {}
});
Implemented interface:
@Override
public void onRefresh() {
if(AddLesson.addNext) {
addDetails.setVisibility(View.GONE);
addLesson.setVisibility(View.GONE);
addWithData.setVisibility(View.VISIBLE);
addWithoutData.setVisibility(View.VISIBLE);
}
}
FragmentStatePagerAdapter:
class TabsAdapter extends FragmentStatePagerAdapter {
public TabsAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
AddLessonDetails addDetails = AddLessonDetails.newInstance(CONTENT[position]);
return addDetails;
}
@Override
public CharSequence getPageTitle(int position) {
return CONTENT[position % CONTENT.length];
}
@Override
public int getCount() {
return CONTENT.length;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
}
What can I do to solve that problem?
Upvotes: 0
Views: 5453
Reputation: 87
This will affect the changes from one page to another page in view pager.
OnPageChangeListener pagechangelistener =new OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
Logger.logMessage("Called first");
pageAdapter.notifyDataSetChanged();
indicator.setCurrentItem(arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
Logger.logMessage("Called second");
}
@Override
public void onPageScrollStateChanged(int arg0) {
Logger.logMessage("Called third");
}
};
myViewPager.setOnPageChangeListener(pagechangelistener);
Use this in your page adapter.
@Override public int getItemPosition(Object object) {
return POSITION_NONE;
}
Upvotes: 0
Reputation: 35651
You are calling getItem on your adapter which is returning (I assume) a brand new fragment.
Because you are returning an uninitialised fragment and then immediately calling its OnRefresh
method which is attempting to manipulate views that have not been created, you get a NPE.
Do not attempt to access views in a fragment until AFTER OnCreateView
is called.
Upvotes: 1