如何在[Scrollable Tabs + Swipe] Navigation-Android中滚动时更新片段?

时间:2013-08-14 03:59:15

标签: android android-fragments android-viewpager media-player

所以我使用Scrollable标签+滑动导航在不同标签屏幕上播放不同的音乐文件。

这是我修改过的OnCreateView,用于自动生成的默认片段

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main_dummy,
                container, false);
         TextView dummyTextView = (TextView) rootView
         .findViewById(R.id.sT);
         dummyTextView.setText(Integer.toString(getArguments().getInt(
         ARG_SECTION_NUMBER)));
        AssetFileDescriptor fda;
        MediaPlayer amp = new MediaPlayer();

        try {    
            fda = rootView.getContext().getAssets().openFd("songname.mp3");
            amp.reset();
            amp.setDataSource(fda.getFileDescriptor());
            amp.prepare();
            amp.start();

        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (IllegalStateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }    
        return rootView;    

} 这里我只有一个textview,显示屏幕的索引号。假设第一个屏幕显示“1”,第二个屏幕显示“2”,等等。

我也希望每个屏幕都有一个imageView,但我可以这样做。

麻烦在于播放音频。

现在它只是在屏幕启动时播放一首歌。说这首歌正在播放。

如果用户向左或向右滑动,如何更改播放的歌曲?我需要停止这个,根据索引号(ARG_SECTION_NUMBER)更改“setDataSource”...然后重新播放。

但是如何知道用户是否刷过并更改了打开的标签? (无论是通过滚动标签还是滑动)

我在做什么用户事件时进行这些更改?我可以设置默认停止播放歌曲的内容,并在屏幕更改时切换到下一首歌曲吗??

我打算最后添加一个播放/暂停按钮。即便如此,我也想用屏幕改变资源。这个问题

Thnx!

1 个答案:

答案 0 :(得分:2)

ViewPager有一个 setOnPageChangeListener()方法,允许您设置一个对象,当新页面成为用户正在查看的页面时,该对象将获得回调。

这样的事情会让你走上正确的道路:

mPageChangeListener = new OnPageChangeListener() {

    @Override
    public void onPageScrollStateChanged(int arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageScrolled(int arg0, float arg1, int arg2) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onPageSelected(int pos) {
        playSoundForPage(pos);
    }

};
yourViewPager.setOnPageChangeListener(mPageChangeListener);

然而,你必须将它放在任何拥有你的ViewPager(活动或片段)而不是你的适配器。

或者你可以使用它:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) { }
else {  }
}