我有一个 FragmentActivity,其中包含在选项卡布局中显示的四个片段。这些选项卡用于在我的数据库中添加或删除内容,并按以下顺序显示:艺术家 - 流派 - 专辑 - 歌曲。专辑选项卡包含数据库中所有艺术家和流派的微调器,这些微调器应随着艺术家或流派添加到各自的选项卡中而更新。这适用于艺术家选项卡;但是,当我在“流派”选项卡中添加或删除某些内容时,除非我将选项卡更改为“艺术家”,否则更改不会显示在“专辑”中,或者转到单独的 Activity 然后返回。
我不明白的问题是,当我将选项卡布局更改为艺术家 - 流派 - 歌曲 - 专辑时,一切正常。似乎选项卡仅在查看单独的活动或片段时才更新,然后返回到应该发生更改的选项卡。我也知道我用来刷新微调器的 sql 或方法没有问题,因为我也尝试将布局更改为流派 - 艺术家 - 专辑 - 歌曲。在这种情况下,流派更新已成功反映在专辑中,但艺术家中的更新不会,直到我将两个选项卡从专辑中移开。
很难比这更清楚地解释,如果需要,我可以发布我的代码,但似乎问题与直接在彼此相邻的选项卡之间导航有关。
我还尝试在我的流派片段中膨胀添加专辑布局,然后在我添加或删除流派时更新微调器。
这是 AddGenreFragment:
@Override
public 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;
}
然后在删除方法中:
// Refresh the spinners in Add Album
ArrayList<String> genreList = dbh.getAllGenres(); // Return all the genres in the database
if (!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 类的构造函数中:
mViewPager.setOffscreenPageLimit(NUMBER_OF_TABS - 1);
这终于解决了我遇到的问题,以及更多的问题。