gpt4 book ai didi

Android ViewPager PagerAdapter 内容无需调用 PagerAdapter#notifyDataSetChanged Exception

转载 作者:行者123 更新时间:2023-11-30 02:44:32 33 4
gpt4 key购买 nike

我的 Activity 中有一个 ViewPager。 ViewPager 在滑动寻呼机时显示不同的值。但是我得到一个 IllegalStateException:

PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! 
Expected adapter item count: 0, found: 20
Pager id: com.exalt.vts:id/summarypager Pager class: class android.support.v4.view.ViewPager
Problematic adapter: class com.exalt.vts.DashBoard$MyPagerAdapter

这是我的 PagerAdapter 源代码:

public class SamplePagerAdapter extends PagerAdapter{

List<View> pages = null;

public SamplePagerAdapter(List<View> pages){
this.pages = pages;
}

@Override
public Object instantiateItem(View collection, int position){
View v = pages.get(position);
((ViewPager) collection).addView(v, 0);
return v;
}

@Override
public void destroyItem(View collection, int position, Object view){
((ViewPager) collection).removeView((View) view);
}

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

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

@Override
public void finishUpdate(View arg0){
}

@Override
public void restoreState(Parcelable arg0, ClassLoader arg1){
}

@Override
public Parcelable saveState(){
return null;
}

@Override
public void startUpdate(View arg0){
}
}

这是主要 Activity :

public class MainActivity extends Activity {
ViewPager viewPager;
SamplePagerAdapter myPagerAdapter;
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

List<View> pages = new ArrayList<View>();
viewPager = (ViewPager)findViewById(R.id.myviewpager);
myPagerAdapter = new SamplePagerAdapter(pages);
viewPager.setAdapter(myPagerAdapter);
viewPager.setCurrentItem(1);

LayoutInflater inflater = LayoutInflater.from(this);
View page = inflater.inflate(R.layout.mylayout, null);

for (int i = 0; i < 20; i++) {
page = inflater.inflate(R.layout.mylayout, null);
textView = (TextView) page.findViewById(R.id.text_view);
textView.setText("Страница "+i);
pages.add(page);
}
}

我尝试在我的 ViewPager 中添加 20 个 View ,但出现异常。

最佳答案

您需要将以下代码从当前位置移动到 for 循环之后,以便在设置数据集后设置适配器

myPagerAdapter = new SamplePagerAdapter(pages);
viewPager.setAdapter(myPagerAdapter);
viewPager.setCurrentItem(1);

或者,您可以在 for 循环之后添加以下内容,以通知适配器自您设置以来数据集已更改

myPagerAdapter.notifyDataSetChanged();

关于Android ViewPager PagerAdapter 内容无需调用 PagerAdapter#notifyDataSetChanged Exception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25302378/

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