java-Android-Fragment不直接更新彼此相邻的选项卡
我有一个FragmentActivity,它包含在选项卡布局中显示的四个片段。这些选项卡用于添加或删除我的数据库中的内容,并按以下顺序显示:艺术家-流派-专辑-歌曲。“唱片集”选项卡包含数据库中所有艺术家和流派的微调器,当艺术家或流派添加到各自的选项卡中时,应更新这些微调器。这适用于“艺术家”选项卡;但是,当我在“流派”选项卡中添加或删除某些内容时,除非我将选项卡更改为“艺术家”,或转到单独的活动然后返回,否则更改将不会显示在相册中 我不明白的问题是,当我将标签布局更改为艺术家-流派-歌曲-专辑时,一切都很好。似乎只有当选项卡查看了单独的活动或片段,然后返回到应该发生更改的选项卡时,它们才会更新。我还知道,我用来刷新微调器的sql或方法没有问题,因为我还尝试将布局更改为流派艺术家专辑歌曲。在这种情况下,流派更新会成功地反映在相册中,但艺术家中的更新不会,直到我将两个选项卡从相册中移开 很难解释得更清楚,如果需要,我可以发布我的代码,但问题似乎与在相邻的选项卡之间导航有关 我还尝试在我的流派片段中放大添加相册布局,然后在添加或删除流派时更新微调器 这是AddGenreFragment:java-Android-Fragment不直接更新彼此相邻的选项卡,java,android,android-fragments,android-tabs,Java,Android,Android Fragments,Android Tabs,我有一个FragmentActivity,它包含在选项卡布局中显示的四个片段。这些选项卡用于添加或删除我的数据库中的内容,并按以下顺序显示:艺术家-流派-专辑-歌曲。“唱片集”选项卡包含数据库中所有艺术家和流派的微调器,当艺术家或流派添加到各自的选项卡中时,应更新这些微调器。这适用于“艺术家”选项卡;但是,当我在“流派”选项卡中添加或删除某些内容时,除非我将选项卡更改为“艺术家”,或转到单独的活动然后返回,否则更改将不会显示在相册中 我不明白的问题是,当我将标签布局更改为艺术家-流派-歌曲-专辑
@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中设置适配器时,ex 4片段。让我们叫| A | B | C | D |
从activityX导航到activityY,其中ViewPager包含上述片段
X --> Y
|--> | A | B | C | D |
渲染Y的视图时,即显示片段A
Y
| A | B |
同时在管道中生成片段B。
当您移动到片段B时,C将在管道中生成,A仍处于活动状态
Y
| A | B | C |
您在A中所做的任何更改,如果反映在B中,则不会呈现。
当您移动到片段C时,D在管道中生成,B仍处于活动状态A被杀死
Y
| B | C | D |
当移动到D时,C被保留,B被终止
Y
| C | D |
当您现在返回到C时,B会在第一次创建时新生成填充数据
Y
| B | C | D |
Y
| A | B | C |
现在,当第二步中的A中的数据发生变化时,必须反映的变化是可用的&可以在下一步中看到
当您现在返回到B时,将生成一个新的,以填充第一次创建的数据
Y
| B | C | D |
Y
| A | B | C |
ViewPager缓存两侧的相邻视图,除非通过移动到另一个活动或将两个视图分开来强制重新创建/刷新视图,否则不会呈现为影响“视图是相邻的”屏幕所做的任何更改。您也遇到了同样的情况&这是ViewPager的默认行为 将A、B、C、D与您的选项卡进行比较,以解决此问题
- 确保使用
而不是FragmentStatePagerAdapter
,因为它不会杀死片段FragmentPagerAdapter