java–Android– 片段不直接更新彼此旁边的标签

java–Android– 片段不直接更新彼此旁边的标签,第1张

概述我有一个FragmentActivity,其中包含四个片段布局中显示的片段.这些选项卡用于在我的数据库中添加或删除内容,并按以下顺序显示:艺术家–流派–专辑–歌曲.“相册”选项卡包含数据库中所有艺术家和流派的微调器,并且应当在各自的选项卡中添加艺术家或类型时更新这些微调器.这

我有一个FragmentActivity,其中包含四个片段布局中显示的片段.这些选项卡用于在我的数据库中添加或删除内容,并按以下顺序显示:艺术家 – 流派 – 专辑 – 歌曲. “相册”选项卡包含数据库中所有艺术家和流派的微调器,并且应当在各自的选项卡中添加艺术家或类型时更新这些微调器.这适用于Artist选项卡;但是,当我在“流派”选项卡中添加或删除某些内容时,除非我将选项卡更改为“艺术家”,或者转到单独的“活动”然后返回,否则更改将不会显示在“相册”中.

我不明白的问题是,当我将标签布局更改为艺术家 – 流派 – 歌曲 – 专辑时,一切都运行得很好.看来这些选项卡只在他们查看单独的活动或片段时才更新,然后返回到应该进行更改的选项卡.我也知道我用来刷新微调器的sql或方法不是问题,因为我也尝试将布局改为Genre – Artist – Album – Song.在这种情况下,类型更新会成功反映在相册中,但是艺术家中的那些更新不会,直到我将两个标签移离相册.

很难解释清楚比这更清楚,如果需要我可以发布我的代码,但似乎问题与直接在彼此旁边的选项卡之间导航有关.

我还尝试在我的类型片段中扩充添加相册布局,然后在添加或删除类型时更新微调器.

这是AddGenreFragment:

@H_301_13@@OverrIDepublic VIEw onCreateVIEw(LayoutInflater inflater, VIEwGroup container, Bundle savedInstanceState) {    super.onCreateVIEw(inflater, container, savedInstanceState);    VIEw v = inflater.inflate(R.layout.add_genre_layout, container, false);    addAlbum = inflater.inflate(R.layout.add_album_layout, container, false);    sPingenre = (Spinner) addAlbum.findVIEwByID(R.ID.sPingenre);    return v;}

然后在删除方法中:

@H_301_13@// Refresh the spinners in Add AlbumArrayList<String> genreList = dbh.getAllGenres();       // Return all the genres in the databaseif (!genreList.isEmpty()) {    // Set the genre drop down Box to be populated by all genres in the database    adapterGenre = new ArrayAdapter<String>(addAlbum.getContext(),    androID.R.layout.simple_spinner_dropdown_item, genreList);    adapterGenre.setDropDownVIEwResource(androID.R.layout.simple_spinner_dropdown_item);    sPingenre.setAdapter(adapterGenre);}

编辑:

我在一个不同的问题上遇到这个问题后终于找到了解决这个问题的方法.它没有更新和正常工作的原因是因为我使用带有片段的VIEwPager作为我的选项卡适配器. VIEwPager的默认设置是一次最多加载3个页面或片段.因此,如果用户从某个选项卡移开3个选项卡,则会删除原始选项卡,并在重新选择原始选项卡时再次调用onCreate.

要解决这个问题,我只需将此行添加到我的TabsAdapter类的构造函数中:

@[email protected](NUMBER_OF_TABS - 1);

这最终解决了我遇到的问题,以及一些已经出现的问题.

解决方法:

要解决这个问题,您必须了解ViewPager的工作原理.

在VIEwPager中设置适配器时,ex 4 Fragments.我们打电话给A | B | C | D |

从活动X导航到活动Y,其中VIEwPager包含上述片段.

@H_301_13@X --> Y      |--> | A | B | C | D |

呈现Y的视图时,即显示片段A,

@H_301_13@          Y        | A | B |

同时片段B在管道中生成.

当您移动到片段B时,C在管道中生成,A仍然存在.

@H_301_13@          Y    | A | B | C |

您在A中所做的任何更改都会在B中反映出来.

当您移动到片段C时,D在管道中生成,B仍然存活. A被杀了

@H_301_13@          Y    | B | C | D |

当你移动到D时,C被保留,B被杀死.

@H_301_13@          Y    | C | D |

当你现在回到C时,B会在第一次创建时生成新填充的数据.

@H_301_13@          Y    | B | C | D |

现在,可以获得在第二步中在A中更改数据时必须反映的更改.可以在下一步看到.

当你现在回到B时,A会在第一次创建时生成新填充的数据.

@H_301_13@          Y    | A | B | C |

VIEwPager在两侧缓存相邻视图,除非通过移动到另一个活动或移动两个视图来强制重建/刷新视图,因此不会渲染对效果视图进行的任何更改是相邻屏幕.你正在经历同样的事情这是VIEwPager的默认行为.

将A,B,C,D与您的标签进行比较,以解决此问题,请查看Update ViewPager dynamically?

>确保使用FragmentStatePagerAdapter而不是FragmentPagerAdapter,因为它不会杀死碎片.

总结

以上是内存溢出为你收集整理的java – Android – 片段不直接更新彼此旁边的标签全部内容,希望文章能够帮你解决java – Android – 片段不直接更新彼此旁边的标签所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1110239.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存