更改后,RecyclerView不会保持修改状态

爱丽儿

删除项目或将项目添加到RecyclerView元素时出现问题,问题不是添加或删除自身时发生,所以我解释了这种情况。

我有一个回收站和一个向其中添加元素的按钮,如果用户按一个视图,它将显示一个包含删除按钮和更多内容的对话框。我可以在“回收者”视图上添加和/或删除项目,并使用可以更新视图notifyDataSetChanged(),但是当我按“后退”按钮(仅通过此操作,不能以其他任何方式)时,视图会再次出现(在删除的情况下)或消失(如果我进行了添加),则将回收站设置为更改前的样子,并且我不希望出现这种情况,因为我创建的delete和add方法不仅会添加/删除视图,而且还会关联数据库中的数据同样,因此,如果删除后按视图,则应用程序崩溃,因为不再有此类数据,但视图仍然存在。

所有这些内容都在一个导航抽屉可访问的片段中,如果我浏览其他片段并再次返回该片段,则后按不再会影响回收器,并且所有这些“鬼影”视图都会消失,因为这些数据已从数据库中重新加载。我需要一个som帮助来避免这种情况,我知道可以删除撤消操作,但是我不想,我只是想删除数据。

更新:这正是发生的情况,回收器视图中的项目消失/重新出现是由按下后退按钮引起的

此图显示添加后消失 此图显示添加后消失

此图显示删除后的重新出现 此图显示删除后的重新出现

UPDATE 2: I've solved the problem by overriding the onBackPressed method using this documentation from google, when back pressed what I do is to navigate to first fragment in the navigation, this is not what I wanted but solved the problem temporarily (as a patch), I'm still looking for answer.

UPDATE 3: Posted my own answer with the fix of all this problem, not using onBackPressed, it worked fine, and I realize some curious behavior

Ariel

As you may notice my app has a navigation drawer, when trying to fix the problem by overridig the onBackPressed() in fragment, I tried to get back to the first fragment in my navigation drawer, when doing so I realize an error that I had not realized before:

NavigationUI.onNavDestinationSelected(menuItem,navController);

This line was duplicated in the NavigationItemSelectedListener:

        navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull final MenuItem menuItem) {
                int id=menuItem.getItemId();
                //this line indicates the action of changing fragment using navController reference
                NavigationUI.onNavDestinationSelected(menuItem,navController);
                if (id==R.id.nav_cuanto){
                    Handler mHandler = new Handler();
                    mHandler.postDelayed(new Runnable() {
                        @Override
                        public void run() {drawer.closeDrawer(GravityCompat.START);}
                    },300);
                }
                if(id==R.id.nav_reportes){
//                    NavigationUI.onNavDestinationSelected(menuItem,navController);  -> this line caused the hole problem
                    Handler mHandler = new Handler();
                    mHandler.postDelayed(new Runnable() {
                        @Override
                        public void run() {drawer.closeDrawer(GravityCompat.START);}
                    },300);
                }
                if(id==R.id.nav_about){
                    Handler mHandler = new Handler();
                    mHandler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            drawer.closeDrawer(GravityCompat.START);
                        }
                    },300);
                }
                return true;
            }
        });

I deleted the line and everything worked just fine, as expected, this particular method creates a new instance of the fragment you are trying to navigate to, but the problem is that when you try to navigate to the fragment you already are in, it creates a new instance a navigate to it, and this new instance is on the over the old one, so when back pressed the app do not return to previous view, but to the same fragment with the old view (out of date, of couse), I couldn't imagine this behavior, this is highly not imaginable, and it's not in the docs so I almost die trying to understand. So WARNING: if someone is trying to use

NavigationUI.onNavDestinationSelected(menuItem,navController);

请勿在同一通话中多次使用它,如果是这样,在最佳情况下,您需要按两次:-(

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更改布局后,Recyclerview保持滚动位置

来自分类Dev

父状态更改后,组件不会更新

来自分类Dev

动画结束后,淡出的CSS动画不会保持淡出状态

来自分类Dev

即使状态更改后,URL也不会更改。ui-router

来自分类Dev

单击后如何保持图标处于更改状态。使用CSS

来自分类Dev

Android-方向更改后,Switch保持检查状态

来自分类Dev

状态更改后功能组件不会重新呈现[React]

来自分类Dev

状态更改后,实际功能组件不会更新

来自分类Dev

React + Redux-状态更改后组件不会更新

来自分类Dev

ajax 请求更改状态后,react 组件不会重新加载

来自分类Dev

更改 componentDidMount 中的状态后,React 组件不会更新

来自分类Dev

更改IP地址后,TCP套接字状态将保持不变,即使提前配置了保持活动状态

来自分类Dev

使用两个不同的函数后,全局变量不会保持其状态

来自分类Dev

在注册或登录后,Parse.com PHP不会使用户保持会话状态

来自分类Dev

修改WordprocessingDocument不会保存更改

来自分类Dev

刷新后保持选择状态

来自分类Dev

刷新后保持崩溃状态

来自分类Dev

刷新后保持选择状态

来自分类Dev

实体框架6-预期GetObjectStateEntries修改后的实体的状态为“未更改”

来自分类Dev

在Android中,是否可以更改相机(从前到后)并仍然保持录制状态?

来自分类Dev

更改层次结构后如何保持状态并防止react组件重新呈现?

来自分类Dev

将 StreamController<String>.broadcast() 更改为 BehaviorSubject<String>() 后,按钮保持禁用状态

来自分类Dev

单击div不会更改状态

来自分类Dev

状态更改不会覆盖模板

来自分类Dev

更改程序大小后,UIView不会保持调整大小吗?

来自分类Dev

在vuex中状态更改后,vue组件的视图不会重新呈现吗?

来自分类Dev

上下文状态更改后,React Native不会重新渲染

来自分类Dev

尽管使用setState(),状态更改后React组件也不会重新呈现

来自分类Dev

即使在响应本机中状态更改后,组件的覆盖也不会消失

Related 相关文章

  1. 1

    更改布局后,Recyclerview保持滚动位置

  2. 2

    父状态更改后,组件不会更新

  3. 3

    动画结束后,淡出的CSS动画不会保持淡出状态

  4. 4

    即使状态更改后,URL也不会更改。ui-router

  5. 5

    单击后如何保持图标处于更改状态。使用CSS

  6. 6

    Android-方向更改后,Switch保持检查状态

  7. 7

    状态更改后功能组件不会重新呈现[React]

  8. 8

    状态更改后,实际功能组件不会更新

  9. 9

    React + Redux-状态更改后组件不会更新

  10. 10

    ajax 请求更改状态后,react 组件不会重新加载

  11. 11

    更改 componentDidMount 中的状态后,React 组件不会更新

  12. 12

    更改IP地址后,TCP套接字状态将保持不变,即使提前配置了保持活动状态

  13. 13

    使用两个不同的函数后,全局变量不会保持其状态

  14. 14

    在注册或登录后,Parse.com PHP不会使用户保持会话状态

  15. 15

    修改WordprocessingDocument不会保存更改

  16. 16

    刷新后保持选择状态

  17. 17

    刷新后保持崩溃状态

  18. 18

    刷新后保持选择状态

  19. 19

    实体框架6-预期GetObjectStateEntries修改后的实体的状态为“未更改”

  20. 20

    在Android中,是否可以更改相机(从前到后)并仍然保持录制状态?

  21. 21

    更改层次结构后如何保持状态并防止react组件重新呈现?

  22. 22

    将 StreamController<String>.broadcast() 更改为 BehaviorSubject<String>() 后,按钮保持禁用状态

  23. 23

    单击div不会更改状态

  24. 24

    状态更改不会覆盖模板

  25. 25

    更改程序大小后,UIView不会保持调整大小吗?

  26. 26

    在vuex中状态更改后,vue组件的视图不会重新呈现吗?

  27. 27

    上下文状态更改后,React Native不会重新渲染

  28. 28

    尽管使用setState(),状态更改后React组件也不会重新呈现

  29. 29

    即使在响应本机中状态更改后,组件的覆盖也不会消失

热门标签

归档