I have a PagerAdapter
that takes in a Cursor
in the constructor and uses that cursor to get the values from the database
to populate the views
.
This is what I am doing:
- On 5 times swipe down action of the view page, I set the visibility of one of the view to be invisible.
- To save the count I just used the
preferences
where I increment and the count. - In the
onResumeFragment()
, I do a check if the count issome_number
and I do aadapter.notifyDataSetChanged()
. I do have extra check on the adapter level as well. - On calling the
notifyDataSetChanged()
, the index moves to the last item in an array and I am assuming its because of thenotifyChanged()
inDataSetObservable
class. notifyChanged()
is actually called when we do call thenotifyDataSetChanged()
. Notify Changed method matches the list in the reverse order and that' probably the reason I am getting the last index when calling the notifyDataSetChanged().
This is how the code for notifyChanged()
looks like from the source:
/**
* Invokes {@link DataSetObserver#onChanged} on each observer.
* Called when the contents of the data set have changed. The recipient
* will obtain the new contents the next time it queries the data set.
*/
public void notifyChanged() {
synchronized(mObservers) {
// since onChanged() is implemented by the app, it could do anything, including
// removing itself from {@link mObservers} - and that could cause problems if
// an iterator is used on the ArrayList {@link mObservers}.
// to avoid such problems, just march thru the list in the reverse order.
for (int i = mObservers.size() - 1; i >= 0; i--) {
mObservers.get(i).onChanged();
}
}
}
What I want to achieve :
- After calling the
notifyDataSetChanged()
, my view pager should just refresh with one of the view disabled and the position of theViewPager
shouldn't go the last index of the ViewPager. - Need to know exactly how and when does the notifyDataSetChanged() works. I did get some info through this STACK_OVERFLOW_POST though.
What I have tried so far :
called
notifyDataSetChanged()
on theonResumeFragment()
and called theviewPager.setCurrentPosition(some_index)
after that.Tried to Recreate the adapter(Least expected way).
I have a
swapCursor
method in the adapter that I used to switch the cursor when any of the conditions come true.
This is code for SwapCursor :
public void swapCursor(final Cursor c) {
if (someCursor == c)
return;
else
if(someCursor!=null)
someCursor.close();
this.someCursor = c;
this.someCursor.moveToFirst();
itemPosition = 0;
notifyDataSetChanged();
}
Any recommendations on how I can do a workaround or maybe a good solution for it. Help is really appreciated. Thanks.