【问题标题】:Android ViewPager with ListView can not remember the last position when called notifyDatasetchanged带有ListView的Android ViewPager在调用notifyDatasetchanged时无法记住最后一个位置
【发布时间】:2016-04-02 22:50:24
【问题描述】:

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

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);
    }
}

【问题讨论】:

  • 嗨阳光,当您刷新父布局时,子布局也会刷新,这就是您的列表视图也刷新的原因。 (根据我的观点)。
  • 但是当视图膨胀时,我将每个页面都保存在 pageAdapter 中,例如第一个 listview 并且不会膨胀 xml,除了第一次在 instantiateItem 中

标签: android android-listview android-viewpager


【解决方案1】:

您可以使用此逻辑...在调用 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);

【讨论】:

  • 非常感谢,但第一种方法似乎不适合我
猜你喜欢
  • 2012-10-07
  • 1970-01-01
  • 2021-04-20
  • 2021-07-27
  • 2016-01-20
  • 1970-01-01
  • 2011-06-30
  • 2015-06-12
  • 1970-01-01
相关资源
最近更新 更多