Android 带有 ListView 的 ViewPager 在调用 notifyDatasetchanged 时无法记住最后一个位置

Android ViewPager with ListView can not remember the last position when called notifyDatasetchanged

我是中国人,我的英语很差。当我使用 ViewPagerListViewListViewViewPager 中添加)并且 PagerAdapter 模式是 POSITION_NONE 时遇到问题,我保存了在 PagerAdapter 中用 List 膨胀 ListView 但奇怪的现象是当我调用 pagerAdapter.notifyDataSetChanged 时 ListView 滚动到第一个 position.Here 是代码:

private class MyAdapter2 extends PagerAdapter {


    @Override
    public int getCount() {
        return 4;
    }

    @Override
    public boolean isViewFromObject(View view, Object object) {
        return view==object;
    }

    @Override
    public int getItemPosition(Object object) {
        return POSITION_NONE;
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        container.addView(listviews[position], 0);

        return listviews[position];
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}

您可以使用此逻辑...在调用 dataSetChanged 之前将此列表视图状态存储在 Parcelable 变量中,并在 dataSetChanged 时间之后从您存储在可打包变量中的值恢复列表视图 像这样..

   Parcelable scrollPos=listview.onSaveInstanceState();
   // call your pagerAdapter.notifyDataSetChanged 

    if(scrollPos != null)
    {
        listview.onRestoreInstanceState(scrollPos);    
    } 

我从 here

找到了另一种方法
    // save index and top position
int index = mList.getFirstVisiblePosition();
View v = mList.getChildAt(0);
int top = (v == null) ? 0 : v.getTop();

// notify dataset changed or re-assign adapter here

// restore the position of listview
mList.setSelectionFromTop(index, top);