我想我不会解释这个问题,因为它很奇怪。
我需要一个类似在线教程的应用程序,基本功能是在页面之间切换(在我的例子中是片段),内容应该被读出。
因此,我遵循了Mr.Tamada“-生命救世主”的教程TTS和片断,我把它们合并了起来。
座右铭是以片段形式读取数据。
代码:
public class TopRatedFragment extends Fragment implements TextToSpeech.OnInitListener
{
private static TextToSpeech tts;
TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_top_rated, container, false);
tv = (TextView) rootView.findViewById(R.id.tv);
tts = new TextToSpeech(getActivity(), TopRatedFragment.this);
speakOut();
return rootView;
}
@Override
public void onInit(int status)
{
if (status == TextToSpeech.SUCCESS)
{
int result = tts.setLanguage(Locale.US);
tts.setSpeechRate(0);
if (result == TextToSpeech.LANG_MISSING_DATA
|| result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("TTS", "Language is not supported");
} else {
speakOut();
}
} else {
Log.e("TTS", "Initilization Failed");
}
}
@Override
public void onDestroy()
{
if (tts != null) {
tts.stop();
tts.shutdown();
}
super.onDestroy();
}
private void speakOut()
{
tts.speak(tv.getText().toString(), TextToSpeech.QUEUE_FLUSH, null);
Log.e("root ", tv.getText().toString());
}
}文本视图中的文本正在读出。但是第一段的文字是在第二段中读的,只有当我向后滑动时才会读到。
片段3->片段2(此处读取片段1文本)。
我真的不明白发生了什么事。
当我打开最近打开的应用程序列表时,它正在读取它自己的文本。
如果possible....Thank ..。
发布于 2015-10-30 13:43:28
问题是,在开始的时候- Fragment1和Fragment2一起加载。这样你就可以听到Fragment1和Fragment2的内容。
现在,当您导航到已经加载的Fragment2时,您无法听到chapter2,那么Fragment3就被加载,这样您就可以听到Chapter3了。
导航到Fragment3时,Fragment1将被删除。
现在,如果您从Fragment3导航到Fragment2,那么将加载Fragment1。因此,你可以听到chapter1。
解决方案:-只需检查片段是否可见,然后执行其余操作。以你为例TTS的事。
FragmentPagerAdapter。setUserVisibleHint()。
@Override void setUserVisibleHint(boolean ){ super.setUserVisibleHint( isVisibleToUser);Log.d(标记,"setUserVisibleHint:“+ isVisibleToUser);}现在您可以在setUserVisibleHint() if(isVisibleToUser){}中执行您的操作,而不是onCreateView(),好的。
https://stackoverflow.com/questions/33410850
复制相似问题