I'm using ViewPager and TabLayout with 5 fragment. My code showed if I click a button which in first or third fragment, data in second fragment. But ViewPager already makes previous and next page, so second fragment doesn't update directly. Second fragment has ListView and shows data in regular order. When I go to fourth or fifth fragment and back to second fragment, the data updated. Because ViewPager newly draws a second fragment.
I found many informations about this problem. Many people say to solve it, I should use 'setUserVisibleHint'. But I don't know how to use that function in my case.
To solve this problem, I must use 'setUserVisibleHint'? Then how to I apply it?
or Are there any other method?
Here is my second fragment code.
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.accesslog_layout, container, false);
adapter = new ListViewAdapter(getActivity().getApplicationContext());
listView = (ListView) view.findViewById(R.id.Accesslog_listView);
emptyElement = (TextView) view.findViewById(R.id.empty_element);
listView.setAdapter(adapter);
listView.setOnItemLongClickListener(itemLongClickListener);
listView.setEmptyView(emptyElement);
check_editName = (TextView) view.findViewById(R.id.Room_State);
listView.setOverScrollMode(view.OVER_SCROLL_ALWAYS);
accessTable = AccessTable.instance();//(getActivity().getApplicationContext());
logD(TAG, "TestTable Dbug===Fragment====AccessLog============ ");
loadAllFromDB();
return view;
}
================================== Update ==================================
Where should I put on the code "getItemPosition()" and "notifyDataSetChanged()"?
Here is my Adapter code.
public class TabPagerAdapter extends FragmentStatePagerAdapter {
private int tabCount;
public TabPagerAdapter(FragmentManager fm, int tabCount){
super(fm);
this.tabCount = tabCount;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
} // Here is right? and is this right code?
@Override
public Fragment getItem(int position){
switch (position){
case 0:
HomeFragment fragment1 = new HomeFragment();
return fragment1;
case 1:
AccessLogFragment fragment2 = new AccessLogFragment();
return fragment2;
case 2:
RegistrationFragment fragment3 = new RegistrationFragment();
return fragment3;
case 3:
SettingFragment fragment4 = new SettingFragment();
return fragment4;
case 4:
HelpFragment fragment5 = new HelpFragment();
return fragment5;
default:
return null;
}
}
@Override
public int getCount(){
return tabCount;
}
}