I have three tabs which holds three different fragments with listview for each fragment and it looks like this:
When I'm pressing white button list item is added to tab2 and if I press purple button list item is added to tab3. Tab3 is refreshed because viewPager has default offscreen limit 1 so when I'm navigating to tab3 it is created and on that time it has its new listitem, but tab2 is already created when app starts so I need to refresh it by some method. So I created updateView() method in tab2 fragment and I'm calling that method on OnPageChangeListener() it updates view, but it gets called every time I navigate to tab2 and it causing lag.All I want to do is to delete that list item and add it to tab2 and it gets removed and it is added to tab2 but when I swipe to tab2 I cannot see it, just after closing app it appears or when tab2 fragment calls onResume, onCreate...
Async method which loads list items in background:
public class AchievedDreamFragment extends Fragment {
ListView achievedListView;
Activity activity;
ArrayList<AchievedCloud> achievedClouds;
AchievedListAdapter achievedListAdapter;
AchievedActionHandler achievedActionHandler;
private GetAvedTask atask;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
activity = getActivity();
achievedActionHandler = new AchievedActionHandler(activity);
}
public class GetAvedTask extends AsyncTask<Void, Void, <AchievedCloud>> {
private final WeakReference<Activity> activityWeakRef;
public GetAvedTask(Activity context) {
this.activityWeakRef = new WeakReference<Activity>(context);
}
@Override
protected ArrayList<AchievedCloud> doInBackground(Void... arg0) {
Log.e(TAG,"do in background");
//achievedActionHandler = new AchievedActionHandler(activity);
ArrayList<AchievedCloud> dreamList = achievedActionHandler.getaDreams();
return dreamList;
}
@Override
protected void onPostExecute(ArrayList<AchievedCloud> adrmList) {
Log.e(TAG,"on Post execute");
if (activityWeakRef.get() != null
&& !activityWeakRef.get().isFinishing()) {
achievedClouds = adrmList;
if (adrmList != null) {
if (adrmList.size() != 0) {
achievedListAdapter = new AchievedListAdapter(activity,
adrmList);
achievedListView.setAdapter(achievedListAdapter);
achievedListAdapter.notifyDataSetChanged();
}
}
}
}
}
UpdateView() method in same fragment where asyncTask is:
public void updateView() {
atask = new GetAvedTask(activity);
atask.execute((Void) null);
}
viewpager OnPageChangeListener():
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
if(position == 1){
achievedDreamFragment.updateView();
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
I tried as well on adapter getItemPosition POSITION_NONE, but it doesn't fix this any ideas what could I try?