我一直在使用在动态添加和删除视图到viewpager中显示的适配器,但并不是所有的都能正常工作。
我的ViewPager包含一些带有WebViews的自定义视图。我所做的是一个PagerAdapter的扩展类,它实现了与我第一篇文章的答案中所示的几乎相同的方法。
当我同时删除多个页面时,问题就来了。正如上面的答案中所解释的,对于删除页面,我们将适配器设置为空,然后再次设置。我使用的方法几乎与只使用一个页面相同,但任何一个页面都被移除。
public void removeView(int position){
synchronized (mLock) {
int readingPosition = pager.getCurrentItem();
pager.setAdapter (null);
mInView.remove(position);
pager.setAdapter (this);
if(mInView.size() > 0){
if(readingPosition > position){
pager.setCurrentItem(readingPosition-1);
}else if(readingPosition < position){
pager.setCurrentItem(readingPosition);
}else if(readingPosition == position){
pager.setCurrentItem(0);
}
}
}
}
public void removeViews (ArrayList<Integer> positions){
synchronized (mLock) {
int readingPosition = pager.getCurrentItem();
Flyer readingFlyer = null;
if(!positions.contains(readingPosition)){
readingFlyer = mInView.get(readingPosition);
}
pager.setAdapter (null);
for(int i = 0; i < positions.size(); i++){
mInView.remove(positions.get(i));
}
pager.setAdapter (this);
if(!positions.contains(readingPosition)){
pager.setCurrentItem(mInView.indexOf(readingFlyer));
}else if(mInView.size() > 0){
pager.setCurrentItem(0);
}
}
}
此外,我已经尝试不再设置适配器,因为它在Add/Delete pages to ViewPager Dynamics中显示,我认为只调用NotifyDataSetChanged()
应该可以工作,但它不行。
我终于解决了这个恼人的错误更改了一点方法。
我发现当我调用.remove(positions.get(I))
或简单地调用.remove(positions.get(0))
时,任何页面都被删除了,因此我认为问题出在使用.remove()
上,然后我发现为什么ArrayList.remove不起作用,这不是同一个问题,但给出了另一种方法来解决这个问题。
这是我最后的代码,也许对某人有用。
public void removeViews (final ArrayList<Integer> positions){
synchronized (mLock) {
int readingPosition = pager.getCurrentItem();
Flyer readingFlyer = null;
if(!positions.contains(readingPosition)){
readingFlyer = mInView.get(readingPosition);
}
pager.setAdapter (null);
List<Flyer> mToRemove = new ArrayList<Flyer>();
for(int i = 0; i < positions.size(); i++){
mToRemove.add(mInView.get(positions.get(i)));
}
mInView.removeAll(mToRemove);
pager.setAdapter (this);
if(!positions.contains(readingPosition)){
pager.setCurrentItem(mInView.indexOf(readingFlyer));
}else if(mInView.size() > 0){
pager.setCurrentItem(0);
}
}
}
我已经搜索了多个网站,android开发者网站,在没有运气解决我的问题后,我不得不寻求社区帮助。我们将非常感谢所有的帮助和建议。 问题: 我总共有12个从服务器接收的图像(在这里解析),我在一个PagerAdapter中显示了它们中的每一个。如果所有的值都不为空,适配器代码工作正常,问题是我允许空值存储在服务器中。当我从服务器获得整个列表时,我只想在包含not null的适配器中拥有这些视图。例如
有没有办法防止用户在PagerAdapter中向左滑动? 当用户第一次进入应用程序时,他们不能向左滑动,因为那里没有任何东西。那么,如果每次你向右滑动时,左边的图像都被破坏了,并且没有什么会像你最初运行应用程序时那样。
问题内容: 有没有更好的办法重写: 我无法使用, 因为它会删除所有我不想要的类。 问题答案: 从,类参数: 要从元素中删除的一个或多个CSS类,这些类之间用空格隔开。
主要内容:基本语法,删除视图删除视图是指删除 MySQL 数据库中已存在的视图。删除视图时,只能删除视图的定义,不会删除数据。 基本语法 可以使用 DROP VIEW 语句来删除视图。 语法格式如下: DROP VIEW <视图名1> [ , <视图名2> …] 其中: 指定要删除的视图名。DROP VIEW 语句可以一次删除多个视图,但是必须在每个视图上拥有 DROP 权限。 删除视图 【实例】删除 v_students_
接口说明 删除视角 如需调用,请访问 开发者文档 来查看详细的接口使用说明 该接口仅开放给已获取SDK的开发者 API地址 POST /api/viewpoint/1.0.0/del 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 id string form 是 视角ID 响应字段说明 无 响应成功示例 { "code": 200, "data": "", "m
通过该接口可以删除指定视频的信息,地址为: http://spark.bokecc.com/api/video/delete 需要传递以下参数: 参数 说明 videoid 视频id,不可为空 userid 用户id,不可为空 format 返回格式,xml 或json XML格式的返回信息如下: <?xmlversion="1.0"encoding="UTF-8"?> <result>OK</