Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何实时修改View-pager

如何实时修改View-pager
EN

Stack Overflow用户
提问于 2019-12-20 16:16:50
回答 1查看 71关注 0票数 0

我,是android的新手。我创建了一个从firebase获取图像的视图分页程序。它工作得很好。但是在视图分页中有一些漏洞,我没能解决。

1)我的View-pager没有实时更新。意味着每当我修改firebase中的图像时。它在实时的基础上不起作用。我必须关闭我的应用程序,然后必须重新启动它才能看到这些更新。

2)当我从firebase中的列表中删除项目时。我的应用程序崩溃了,在Logcat中抛出了这个异常。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java.lang.IndexOutOfBoundsException: Index: -1, Size: 5
    at java.util.ArrayList.add(ArrayList.java:483)
    at com.release.pack.lootbox.Fragments.HomeFragment$7.onEvent(HomeFragment.java:294)
    at com.release.pack.lootbox.Fragments.HomeFragment$7.onEvent(HomeFragment.java:281)

下面是我的代码:

滑块图像适配器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class SliderImageAdapter extends SliderViewAdapter<SliderImageAdapter.SliderAdapterVH> {

    public List<Banner> bannerList;
    public Context context;

    public SliderImageAdapter(Context context, List<Banner> bannerList) {

        this.bannerList = bannerList;
        this.context = context;

    }

    @Override
    public SliderAdapterVH onCreateViewHolder(ViewGroup parent) {
        View inflate = LayoutInflater.from(parent.getContext()).inflate(R.layout.image_slider_myshop, parent, false);
        return new SliderAdapterVH(inflate);
    }

    @Override
    public void onBindViewHolder(final SliderAdapterVH viewHolder, final int position) {


        Glide.with(viewHolder.itemView)
                .load(bannerList.get(position).getmSliderImage())
                .fitCenter()
                .into(viewHolder.imageViewBackground);
    }

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


    class SliderAdapterVH extends SliderViewAdapter.ViewHolder {

        View itemView;
        ImageView imageViewBackground;
        ImageView imageGifContainer;
        TextView textViewDescription;
        public ProgressBar progressBar;
        public ImageView imageViewFailed;

        public SliderAdapterVH(View itemView) {
            super(itemView);
            imageViewBackground = itemView.findViewById(R.id.iv_auto_image_slider);
            imageGifContainer = itemView.findViewById(R.id.iv_gif_container);
            textViewDescription = itemView.findViewById(R.id.tv_auto_image_slider);
            progressBar = itemView.findViewById(R.id.featured_deal_progress);
            imageViewFailed = itemView.findViewById(R.id.featured_deal_img_failed_to_load);

            this.itemView = itemView;
        }
    }
}

主页片段:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private SliderImageAdapter sliderImageAdapter;
    private List<Banner> bannerList;

bannerList = new ArrayList<>();
        sliderImageAdapter = new SliderImageAdapter(getActivity(),bannerList);

sliderMyshop = view.findViewById(R.id.imageSlider);
        sliderMyshop.setSliderAdapter(sliderImageAdapter);
        sliderMyshop.setIndicatorAnimation(IndicatorAnimations.WORM); //set indicator animation by using SliderLayout.IndicatorAnimations. :WORM or THIN_WORM or COLOR or DROP or FILL or NONE or SCALE or SCALE_DOWN or SLIDE and SWAP!!
        sliderMyshop.setSliderTransformAnimation(SliderAnimations.SIMPLETRANSFORMATION);
        sliderMyshop.setIndicatorSelectedColor(Color.WHITE);
        sliderMyshop.setIndicatorUnselectedColor(Color.GRAY);
        sliderMyshop.startAutoCycle();



    mFirestore.collection("Banner").orderBy("priority", Query.Direction.DESCENDING).addSnapshotListener(new EventListener<QuerySnapshot>() {
            @Override
            public void onEvent(@javax.annotation.Nullable QuerySnapshot documentSnapshots, @javax.annotation.Nullable FirebaseFirestoreException e) {
                if (e != null) {
                    Log.d(TAG, "Error : " + e.getMessage());
                }
                assert documentSnapshots != null;

                for (DocumentChange doc : documentSnapshots.getDocumentChanges()) {

                    if (doc.getType() == DocumentChange.Type.ADDED) {
                        String doc_id = doc.getDocument().getId();
                        Banner banner = doc.getDocument().toObject(Banner.class).withDocId(doc_id);
                        bannerList.add(doc.getNewIndex(), banner);
                        sliderImageAdapter.notifyDataSetChanged();

                    } else if (doc.getType() == DocumentChange.Type.MODIFIED) {
                        String docID = doc.getDocument().getId();
                        Banner changedModel = doc.getDocument().toObject(Banner.class).withDocId(docID);
                        if (doc.getOldIndex() == doc.getNewIndex()) {
                            // Item changed but remained in same position
                            bannerList.set(doc.getOldIndex(), changedModel);
//                            sliderImageAdapter.notifyItemChanged(doc.getOldIndex());
                        } else {
                            // Item changed and changed position
                            bannerList.remove(doc.getOldIndex());
                            bannerList.add(doc.getNewIndex(), changedModel);
//                            sliderImageAdapter.notifyItemMoved(doc.getOldIndex(), doc.getNewIndex());
                        }
                    } else if (doc.getType() == DocumentChange.Type.REMOVED) {
                        // remove
                        bannerList.remove(doc.getOldIndex());
//                        sliderImageAdapter.notifyItemRemoved(doc.getOldIndex());
                    }
                }
            }
        });

当我在firebase中添加新图像时,它会实时更新。但当我在我的图像中做修改时就不会了。或者从我的列表中删除该项目。

EN

回答 1

Stack Overflow用户

发布于 2019-12-20 16:34:27

崩溃

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bannerList.add(doc.getNewIndex(), banner);

这一行是IndexOutOfBoundsException.的原因

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
(java.lang.IndexOutOfBoundsException: Index: -1, Size: 5)

doc.getNewIndex()正在返回-1。列表不能接受-1作为索引。所以请检查你的doc.getNewIndex()

用于实时更新的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bannerList.clear();

for循环之前添加此代码,否则将添加冗余数据,并且无法更新新的更改。

参见this:每次查询结果发生变化(即添加、删除或修改文档时),快照处理程序都会收到一个新的查询快照。

对于每个更改,将获取整个集合的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59428359

复制
相关文章
如何在chrome中实时修改JS
有时候,我们需要去研究人家网站的运行机制,这就免不了要在他们的前端脚本里插入一些调试代码看看运行效果。在chrome65以前,我们可以打开目标网页的开发者工具—source选项卡—目标JS/CSS文件,然后在相关位置写入代码保存后即可看到改动后的效果。chrome65之后需要进行本地代码替换,本文就介绍一下如何在chrome中用本地代码替换在线代码,以达到在线修改JS的效果。
流量黑客
2020/01/02
38.1K2
如何在chrome中实时修改JS
如何修改grub
noibrs noibpb nopti nospectre_v2 nospectre_v1 l1tf=off nospec_store_bypass_disable no_stf_barrier mds=off mitigations=off
mingjie
2022/05/12
1.8K0
如何实时监控电脑?
随着互联网的快速发展,使用电脑办公面临着各种各样的进攻和威胁:机密泄露、数据丢失、网络滥用,员工因操作失误导致公司重要文件损坏丢失等现象层出不穷。这些问题其实都源于管理者没有对员工电脑进行监管,到底怎样才能实时监控员工电脑呢?可以安装电脑监控软件,如何选择呢?
绿虫小兵
2023/07/25
2540
如何修改Tomcat版本[通俗易懂]
1.找到tomcat所在位置进入lib目录 apache-tomcat-8.0.0\lib
全栈程序员站长
2022/09/27
3.1K0
如何修改Tomcat版本[通俗易懂]
热加载技术:修改Python代码并实时查看结果 ⛵
在运行 Python 脚本时,我经常发现自己忘记打印所有必要的详细信息来跟踪代码项目的进度和中间信息。我们经常在训练机器学习模型时遇到各种各样的信息记录问题,当然,问题不仅限于机器学习,像爬虫等场景也需要做大量记录,但我们经常在运行起代码之后才意识到忘记做一些需要记录的信息输出。
ShowMeAI
2022/12/13
1K0
热加载技术:修改Python代码并实时查看结果 ⛵
如何修改alert样式
HTML5学堂:无论是PC还是移动端,系统自带alert样式总是让人感觉很丑陋,今天就教大家如何修改alert弹窗样式。 只能自定一个弹窗样式 首先必须明白的一点是,alert()只是一个方法,而这个方法内部是native code,这是我们无法修改的部分,而最终暴露的只有这个alert()方法名字而已,你甚至拿不到alert的属性,因此要真正意义上的做到修改alert样式是不可行的。 有了以上这个条件基础,我们能做的只有重写alert()方法,替换掉系统自带的alert()方法。 一行代码替换alert(
HTML5学堂
2018/03/12
7K0
如何修改host文件[通俗易懂]
二.为何要修改host: 1).就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”, 当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
全栈程序员站长
2022/11/04
9.9K0
如何修改host文件[通俗易懂]
如何修改opkg 源
http://downloads.openwrt.org.cn/ 上面的链接是openwrt国内的源,但是只有适合以下几个系统的源 Hacked/ 18-Jun-2014 13:58 – OpenWrt-DreamBox/ 01-Jan-2015 20:58 – PandoraBox/ 01-Oct-2015 00:33 – andlinux_lintel/ 18-Jun-2014 13:56 – ar_series_img/ 18-Jun-2014 18:02 – backfire/ 18-Jun-2014 18:00 – dreambox/ 07-Nov-2014 21:47 – mldonkey/ 18-Jun-2014 13:58 – openwrtcn/ 18-Jun-2014 14:00 – openwrtcn_img/ 18-Jun-2014 18:17 – software/ 18-Jun-2014 13:59 – sources/ 23-Jun-2014 21:05 – zjhzzyf_img/ 23-Jul-2014 14:33 –
全栈程序员站长
2022/08/25
3K0
如何修改go源码
看了一篇文章改go源码重新编译, 虽然工作中没使用到但是好奇试下, 下面是最简单的修改 fmt 包的 Println 函数为例进行了修改,
用户2825413
2022/04/19
1.4K0
如何修改go源码
如何制作实时库存报表
草料二维码暂不支持自动计算功能,无法看到实时的库存数量。但可以使用外部数据分析工具,如百度Sugar,连接草料二维码官方数据库,即可自由实现各类计算,包括实时库存。
草料二维码
2023/04/20
1.4K0
Python 如何实时绘制数据
提到 GUI 绘图,大家可能第一反应是 OpenGL 和 Matplotlib,但其实基于 Qt 平台还有个功能强大的 pyqtgraph 绘图库,不仅支持丰富的图形种类,还能实时更新绘图数据并进行交互式操作。
TTTEED
2020/08/06
3.5K0
phpstorm如何修改php版本
file/setting/Langueages&Frameworks/php/Composer, 取消勾选
超级小可爱
2023/02/20
3K0
python中如何修改文件?
修改的概念:对于硬盘上数据的修改, 根本没有改的操作, 只有覆盖操作修改的流程:文件的修改都是数据加载到内存中, 在内存中修改完再覆盖入硬盘一.修改方式一1.修改过程先以 r 模式打开源文件,将源文件内容全部读入内存然后在内存中完成修改再以 w 模式打开源文件,将修改后的内容覆盖入源文件2.优缺点优点 : 不须要硬盘预留足够的空间缺点 : 会在文件内容过大的情况下,占用过多的内存3.使用场景看情况而定, 一般用于文本编辑器, 让用户能看到全部的内容with open('user.txt',mode='r',
Python学习者
2023/04/21
8350
如何修改 Discourse 的域名
如果你参考了 GitHub 上的安装指南 页面中的内容安装了一个 Discourse 实例后希望对自己安装的实例修改域名的使用手册。 如果你使用的是 Discourse 官方主机服务 的话,请参考 针对 Discourse 的云服务配置你的域名 页面中的详细内容。
HoneyMoose
2021/09/08
3.7K0
如何修改 Discourse 的域名
如何修改GUI界面主题?
声明:本文仅代表原作者观点,仅用于SAP软件的应用与学习,不代表SAP公司。文中使用的SAP相关文字或图片等相应著作权归原厂商所有。
齐天大圣
2022/03/07
1.4K0
如何修改GUI界面主题?
SAP 如何修改SAP文本
在“屏幕制作器文本”下面双击,进入屏幕字段列表,找到需要修改的字段,然后直接在下面修改文本。
matinal
2020/11/02
1.3K0
SAP 如何修改SAP文本
Hive 如何修改分区列?
Hive 分区就是将数据按照数据表的某列或者某几列分为多个区域进行存储,这里的区域是指 hdfs 上的文件夹。按照某几列进行分区,就是说按照某列分区后的数据,继续按照不同的分区列进行分区。创建分区后,指定分区值即可直接查询该分区的数据,能够有效提高查询性能。
披头
2022/12/19
2.6K0
如何用 Python实时监控文件?
在业务稳定性要求比较高的情况下,运维为能及时发现问题,有时需要对应用程序的日志进行实时分析,当符合某个条件时就立刻报警,而不是被动等待出问题后去解决,比如要监控nginx的$request_time和$upstream_response_time时间,分析出最耗时的请求,然后去改进代码,这时就要对日志进行实时分析了,发现时间长的语句就要报警出来,提醒开发人员要关注,当然这是其中一个应用场景,通过这种监控方式还可以应用到任何需要判断或分析文件的地方,所以今天我们就来看看如何用python实现实时监控文件,我给三个方法实例:
用户6543014
2019/10/25
2K0
Kafka如何修改分区Leader
前几天有个群友问我: kafka如何修改优先副本? 他们有个需求是, 想指定某个分区中的其中一个副本为Leader
石臻臻的杂货铺[同名公众号]
2021/12/31
1.2K0
Kafka如何修改分区Leader
点击加载更多

相似问题

实时regexp修改

30

如何实时修改Settings.bundle?

11

如何使用shiny实时修改文件?

129

jQuery实时修改css

11

实时移除或修改

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文