我有PagerAdapter
在构造函数中接收Cursor
并使用该游标从database
获取值以填充views
。
这就是我在做的事情:
preferences
我增加的位数和计数。onResumeFragment()
中,我会检查计数是some_number
而我是adapter.notifyDataSetChanged()
。我也对适配器级别进行了额外的检查。notifyDataSetChanged()
时,索引移动到数组中的最后一项,我假设它是因为notifyChanged()
类中的DataSetObservable
。notifyChanged()
时,实际上会调用notifyDataSetChanged()
。 Notify Changed方法以相反的顺序匹配列表,这可能是我在调用notifyDataSetChanged()时获取最后一个索引的原因。 这是code for notifyChanged()
从源头看起来的样子:
/**
* 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();
}
}
}
我想要实现的目标:
notifyDataSetChanged()
后,我的视图寻呼机应该只在其中一个视图被禁用的情况下刷新,ViewPager
的位置不应该是ViewPager的最后一个索引。到目前为止我尝试了什么:
在notifyDataSetChanged()
上调用onResumeFragment()
,之后调用viewPager.setCurrentPosition(some_index)
。
试图重新创建适配器(最不希望的方式)。
我在适配器中有一个swapCursor
方法,用于在任何条件成功时切换光标。
这是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();
}
有关如何解决方法或可能是解决方案的任何建议。非常感谢帮助。感谢。