所以我使用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!
答案 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 { }
}