java-Android-Fragment不直接更新彼此相邻的选项卡

java-Android-Fragment不直接更新彼此相邻的选项卡,java,android,android-fragments,android-tabs,Java,Android,Android Fragments,Android Tabs,我有一个FragmentActivity,它包含在选项卡布局中显示的四个片段。这些选项卡用于添加或删除我的数据库中的内容,并按以下顺序显示:艺术家-流派-专辑-歌曲。“唱片集”选项卡包含数据库中所有艺术家和流派的微调器,当艺术家或流派添加到各自的选项卡中时,应更新这些微调器。这适用于“艺术家”选项卡;但是,当我在“流派”选项卡中添加或删除某些内容时,除非我将选项卡更改为“艺术家”,或转到单独的活动然后返回,否则更改将不会显示在相册中 我不明白的问题是,当我将标签布局更改为艺术家-流派-歌曲-专辑

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

我不明白的问题是,当我将标签布局更改为艺术家-流派-歌曲-专辑时,一切都很好。似乎只有当选项卡查看了单独的活动或片段,然后返回到应该发生更改的选项卡时,它们才会更新。我还知道,我用来刷新微调器的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中设置适配器时,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
    ,因为它不会杀死片段

如何在这些选项卡之间切换?您可以通过滑动或单击操作栏中的选项卡在选项卡之间切换。