查看寻呼机将索引设置为调用notifydatasetchanged()

时间:2015-06-23 16:01:11

标签: android android-viewpager android-cursor notifydatasetchanged

我有PagerAdapter在构造函数中接收Cursor并使用该游标从database获取值以填充views

这就是我在做的事情:

  • 在5次向下滑动视图页面的操作时,我将其中一个视图的可见性设置为不可见。
  • 为了保存计数,我只使用了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()的工作方式和时间。我确实通过这个STACK_OVERFLOW_POST获得了一些信息。

到目前为止我尝试了什么:

  • 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();

    } 

有关如何解决方法或可能是解决方案的任何建议。非常感谢帮助。感谢。

0 个答案:

没有答案