gpt4 book ai didi

android - 从 instantiateItem() 调用 notifyDataSetChanged

转载 作者:行者123 更新时间:2023-11-29 00:26:29 25 4
gpt4 key购买 nike

我需要显示一个最初只显示一个 View 的 ViewPager。一旦此 View 通过测量和布局 channel ,根据这些结果,我可能需要更改适配器的内容。在这样做时,我遇到了这样一种情况,即 ViewPager 在尝试从某个位置滑动到下一个项目时不会跟随它的移动。
我确定我在我的适配器实现中做错了什么,但我不能指出问题所在。

为了演示,我创建了一个虚拟适配器来模拟我的实际项目中发生的情况。为了重现该问题,只需尝试一直滑动到位置 2(第 3 项),结果是您无法通过位置 1(第 2 项)。

谢谢!

public class CustomAdapter extends PagerAdapter {
int pages = 0;

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

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

public void setPages(int x) {
this.pages = x;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
TextView tv = new TextView(MainActivity.this);
ViewGroup.LayoutParams lp =
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);

tv.setLayoutParams(lp);
tv.setText("Position: " + position);

if (position == 0 && pages == 1) {
setPages(2);
notifyDataSetChanged();
}
if (position == 1 && pages == 2) {
setPages(3);
notifyDataSetChanged();
}

container.addView(tv);
return tv;
}

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

Activity (onCreate 左右):

    CustomAdapter adapter = new CustomAdapter();
adapter.setPages(1);
vp.setAdapter(adapter);
adapter.notifyDataSetChanged();

最佳答案

instantiateItem 项目方法是错误的地方。因为它只适用于一个 View ,所以它同时适用于 3 个 View 。

尝试移动

    if (position == 0 && pages == 1) {
setPages(2);
notifyDataSetChanged();
}
if (position == 1 && pages == 2) {
setPages(3);
notifyDataSetChanged();
}

setPrimaryItem 方法

更新:

尝试在 setPrimaryItem 方法中为您想要的位置调用 instantiateItem 方法。你可以这样做,因为 instantiateItem 是一个 public 方法。但我不知道它是如何工作的,这是一个理论。试试吧。

关于android - 从 instantiateItem() 调用 notifyDataSetChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18958272/

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