gpt4 book ai didi

android - 使用没有 fragment 的页面适配器

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:25:10 27 4
gpt4 key购买 nike

是否可以在没有 fragment 的情况下使用 ViewPager?我能找到的所有示例都将几个 fragment 加载到 ViewPager。

我想像使用 ListView 一样使用它。我想创建一个自定义适配器,它会根据寻呼机所在的位置来扩充布局。

如果可能的话,有人能给我举个例子吗?

最佳答案

我遇到了类似的问题,我花了一些时间才弄明白。在这里发布我的适配器以供将来引用。

/**
* A page adapter which works with a large data set by reusing views.
*/
public abstract class ListPageAdapter<T> extends PagerAdapter {

// Views that can be reused.
private final List<View> mDiscardedViews = new ArrayList<View>();
// Views that are already in use.
private final SparseArray<View> mBindedViews = new SparseArray<View>();

private final ArrayList<T> mItems;
private final LayoutInflater mInflator;
private final int mResourceId;

public ListPageAdapter(Context context, int viewRes) {
mItems = new ArrayList<T>();
mInflator = LayoutInflater.from(context);
mResourceId = viewRes;
}

@Override
public int getCount() {
return mItems.size();
}

@Override
public boolean isViewFromObject(View v, Object obj) {
return v == mBindedViews.get(mItems.indexOf(obj));
}

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
View view = mBindedViews.get(position);
if (view != null) {
mDiscardedViews.add(view);
mBindedViews.remove(position);
container.removeView(view);
}
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
View child = mDiscardedViews.isEmpty() ?
mInflator.inflate(mResourceId, container, false) :
mDiscardedViews.remove(0);

T data = mItems.get(position);
initView(child, data, position);

mBindedViews.append(position, child);
container.addView(child, 0);
return data;
}

public void add(T item) {
mItems.add(item);
}

public T remove(int position) {
return mItems.remove(position);
}

public void clear() {
mItems.clear();
}

/**
* Initiate the view here
*/
public abstract void initView(View v, T item, int position);
}

当适配器中的数据更改时,viewPager 不会自动更新。为此,我使用了

pager.setAdapter(null);
pager.setAdapter(myAdapter);
pager.setCurrentItem(0);

关于android - 使用没有 fragment 的页面适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18117754/

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