gpt4 book ai didi

android - 如何实现 PagerAdapter 的 View 回收机制?

转载 作者:IT老高 更新时间:2023-10-28 21:55:47 26 4
gpt4 key购买 nike

我有一个寻呼机适配器,它可以扩展表示日历的复杂 View 。

每年膨胀日历大约需要 350 毫秒。

为了提高性能,我想实现与回收 View 的 ListView 数组适配器中存在的相同机制(getView() 中的 convertView 参数)。

这是我当前来自适配器的 getView()

@Override
protected View getView(VerticalViewPager pager, final DateTileGrid currentDataItem, int position)
{
mInflater = LayoutInflater.from(pager.getContext());

// This is were i would like to understand weather is should use a recycled view or create a new one.
View datesGridView = mInflater.inflate(R.layout.fragment_dates_grid_page, pager, false);


DateTileGridView datesGrid = (DateTileGridView) datesGridView.findViewById(R.id.datesGridMainGrid);
TextView yearTitle = (TextView) datesGridView.findViewById(R.id.datesGridYearTextView);
yearTitle.setText(currentDataItem.getCurrentYear() + "");
DateTileView[] tiles = datesGrid.getTiles();

for (int i = 0; i < 12; i++)
{
String pictureCount = currentDataItem.getTile(i).getPictureCount().toString();
tiles[i].setCenterLabel(pictureCount);
final int finalI = i;
tiles[i].setOnCheckedChangeListener(new DateTileView.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(DateTileView tileChecked, boolean isChecked)
{
DateTile tile = currentDataItem.getTile(finalI);
tile.isSelected(isChecked);
}
});
}

return datesGridView;
}

实现这种行为的任何指针或方向?特别是我如何在适配器中知道其中一个 DateTileGridViews 正在从屏幕上滑动,以便我可以将其保存在内存中以供下次重用。

最佳答案

所以我想通了。

  1. overwrite destroyItem(ViewGroup container, int position, Object view) ans save you cached view
  2. 创建一个单独的方法,看看是否有机会使用回收的 View ,或者是否应该扩充一个新的 View 。
  3. 记得在缓存中删除回收的 View ,以避免相同的 View 将相同的 View 附加到寻呼机。

这里是代码.. 我使用 Stack of view 来缓存从我的寻呼机中删除的所有 View

private View inflateOrRecycleView(Context context)
{

View viewToReturn;
mInflater = LayoutInflater.from(context);
if (mRecycledViewsList.isEmpty())
{
viewToReturn = mInflater.inflate(R.layout.fragment_dates_grid_page, null, false);
}
else
{
viewToReturn = mRecycledViewsList.pop();
Log.i(TAG,"Restored recycled view from cache "+ viewToReturn.hashCode());
}


return viewToReturn;
}

@Override
public void destroyItem(ViewGroup container, int position, Object view)
{
VerticalViewPager pager = (VerticalViewPager) container;
View recycledView = (View) view;
pager.removeView(recycledView);
mRecycledViewsList.push(recycledView);
Log.i(TAG,"Stored view in cache "+ recycledView.hashCode());
}

不要忘记在适配器构造函数中实例化堆栈。

关于android - 如何实现 PagerAdapter 的 View 回收机制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19020114/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com