我正在尝试创建类似Instagram故事的幻灯片。
我写了一些代码,一切正常。我正在使用!
更换幻灯片。我想防止在幻灯片为视频类型时更改幻灯片,它会停止线程直到加载视频后再加载视频,然后再次启动处理程序线程。检查代码以获得更好的理解。
这是我的代码。
Handler.postDelay
这是我更改幻灯片的方式。
private class StorySlidePagerAdapter extends FragmentStatePagerAdapter {
public StorySlidePagerAdapter(FragmentManager fm) {
super(fm);
Log.i("StoryActivityDebug", "StorySlidePagerAdapter constructor");
}
@Override
public Fragment getItem(int position) {
Log.i("StorySlideDebug", "getItem position " + position);
StorySlide storySlide = StorySlide.create(position);
storySlide.setOnStoryLoad(StoryActivity.this);
return storySlide;
}
@Override
public int getCount() {
return NUM_STORIES;
}
}
这里是 StorySlide
updateStory = new Runnable() {
@Override
public void run() {
if (killThread)
return;
mPager.setCurrentItem(mPager.getCurrentItem() + 1);
}
};
handler.postDelayed(updateStory, slideChangingTime);
如果故事幻灯片类型为视频,则停止 public class StorySlide extends Fragment {
// other code
@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// other code
// storySlides is list of object contain info about story
if( storySlides.getType == VIDEO )
slideInterface.onKillThread(true); // it will stop the thread
}
@Override
public void onVideoPrepare(){ slideInterface.startThread() }
}
线程以更改下一张幻灯片,并等待直到准备好视频后再准备幻灯片,然后再次开始更改幻灯片。它工作正常,但问题出在updateStory
FragmentStatePagerAdapter
已经创建了至少一个或两个FragmentStatePagerAdapter
,可能是为了获得更好的性能。如果您在第一张幻灯片上,它已经为您创建了下一张幻灯片,但仅在您设置fragments
时显示
您可以通过查看日志进行检查。
这种行为给我带来了问题。例如,如果第一张幻灯片是图像,第二张幻灯片是视频。它同时创建两者,因为当幻灯片是视频时,它将阻止线程更改幻灯片直到视频加载。由于只有在第二张幻灯片中没有加载视频之前,第一张幻灯片才会更改。
我要换第一张幻灯片,然后再放第二张幻灯片,直到视频加载完毕。
请让我知道我在哪里出问题。
更新
所有问题都与mPager.setCurrentItem(itemNumber)
的行为有关。它在显示之前创建视图。并且没有覆盖方法来显示或不显示通知视图。我自己怎么做这样的方法。还是在显示之前停止FragmentStatePagerAdapter
创建视图?有什么办法吗?