Edw*_*aly 3 java android android-fragments android-tabs
我有一个FragmentActivity,其中包含四个片段布局中显示的片段.这些选项卡用于在我的数据库中添加或删除内容,并按以下顺序显示:艺术家 - 流派 - 专辑 - 歌曲."相册"选项卡包含数据库中所有艺术家和流派的微调器,并且应当在各自的选项卡中添加艺术家或类型时更新这些微调器.这适用于Artist选项卡; 但是,当我在"流派"选项卡中添加或删除某些内容时,除非我将选项卡更改为"艺术家",或者转到单独的"活动"然后返回,否则更改将不会显示在"相册"中.
我不明白的问题是,当我将标签布局更改为艺术家 - 流派 - 歌曲 - 专辑时,一切都运行得很好.看来这些选项卡只在他们查看单独的活动或片段时才更新,然后返回到应该进行更改的选项卡.我也知道用于刷新微调器的sql或方法不是问题,因为我也尝试将布局更改为Genre - Artist - Album - Song.在这种情况下,类型更新会成功反映在相册中,但是艺术家中的那些更新不会,直到我将两个标签移离相册.
很难解释清楚,并且如果需要我可以发布我的代码,但似乎问题与直接在彼此旁边的选项卡之间导航有关.
我还尝试在我的类型片段中扩充添加相册布局,然后在添加或删除类型时更新微调器.
这是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;
}
Run Code Online (Sandbox Code Playgroud)
然后在删除方法中:
// 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);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我在一个不同的问题上遇到这个问题后终于找到了解决这个问题的方法.它没有更新和正常工作的原因是因为我使用带有片段的ViewPager作为我的选项卡适配器.ViewPager的默认设置是一次最多加载3个页面或片段.因此,如果用户从某个选项卡移开3个选项卡,则会删除原始选项卡,并在重新选择原始选项卡时再次调用onCreate.
要解决这个问题,我只需将此行添加到我的TabsAdapter类的构造函数中:
mViewPager.setOffscreenPageLimit(NUMBER_OF_TABS - 1);
Run Code Online (Sandbox Code Playgroud)
这最终解决了我遇到的问题,以及一些已经出现的问题.
要解决这个问题,你必须了解它的ViewPager工作原理.
在ViewPager中设置适配器时,ex 4 Fragments.让我们把| A | B | C | D |
X --> Y
|--> | A | B | C | D |
Run Code Online (Sandbox Code Playgroud)
呈现Y的视图时,即显示片段A,
Y
| A | B |
Run Code Online (Sandbox Code Playgroud)
同时片段B在管道中生成.
Y
| A | B | C |
Run Code Online (Sandbox Code Playgroud)
您在做出任何更改一个是被反映在乙是不渲染.
Y
| B | C | D |
Run Code Online (Sandbox Code Playgroud)
Y
| C | D |
Run Code Online (Sandbox Code Playgroud)
Y
| B | C | D |
Run Code Online (Sandbox Code Playgroud)
现在,具有改变反射时数据是在改变阿在第二个步骤是提供与可以在下一步骤中被看见.
Y
| A | B | C |
Run Code Online (Sandbox Code Playgroud)
将A,B,C,D与您的标签进行比较,要解决此问题,请动态查看Update ViewPager吗?
FragmentStatePagerAdapter而FragmentPagerAdapter不是杀死碎片.| 归档时间: |
|
| 查看次数: |
1335 次 |
| 最近记录: |