我想我没有解释这个问题,因为它是WEIRD。
我需要一个类似于在线教程的应用程序,基本功能是在页面之间切换(在我的情况下是片段),内容应该读出来。
所以,我跟着Mr.Tamada" - 生命救星"教程The TTS和Fragments,我已将它们合并。
座右铭是以片段形式读取数据。
代码:
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());
}
}
textview中的文字正在读出来。但是,当我向后滑动时,第一个片段的文本也会在第二个片段中读取。
片段3 - >片段2(这里读取片段1文本)。
我真的不明白发生了什么。
当我从最近打开的应用列表中打开应用时,它正在阅读自己的文本。
请尽可能帮助....谢谢..
答案 0 :(得分:0)
问题是,在开始时,Fragment1
与Fragment2
一起加载。所以你可以听到来自Fragment1
和Fragment2
resp。
现在当你导航到Fragment2
[已经加载,因此你听不到第2章]时,Fragment3
被加载,所以你可以听到第3章。
导航至Fragment3
时,Fragment1
将被删除。
现在,如果您从Fragment3
导航到Fragment2
,则会加载Fragment1
。因此,你可以听到第1章。
解决方案: - 只需检查片段是否可见,然后执行其余操作。在你的情况下TTS的事情。
FragmentPagerAdapter
。覆盖setUserVisibleHint()
。
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
super.setUserVisibleHint(isVisibleToUser);
Log.d(TAG, "setUserVisibleHint: " + isVisibleToUser);
}
现在,您可以在setUserVisibleHint() if(isVisibleToUser){}
内执行您的操作,而不是onCreateView()
。