TTS 没有阅读正确片段的文本
TTS is not reading the text of proper fragment
我想我无法解释这个问题,因为它很奇怪。
我需要一个类似于在线教程的应用程序,基本功能是在页面之间切换(我的情况是片段)并且应该读出内容。
所以,我关注了 Mr.Tamada " - The life saviour" tutorials The TTS and 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 文本)。
我真的不明白这是怎么回事。
当我从最近打开的应用程序列表中打开应用程序时,它正在阅读自己的文本。
如果可能请帮忙....谢谢..
嗯,问题是在开始时- Fragment1
与 Fragment2
一起加载。所以你可以听到来自 Fragment1
和 Fragment2
resp.
的内容
现在,当您导航到 Fragment2
[已经加载,因此您听不到第 2 章] 时,Fragment3
已加载,因此您可以听到第 3 章。
当您导航到 Fragment3
时,Fragment1
将被删除。
现在,如果您从 Fragment3
导航到 Fragment2
,则会加载 Fragment1
。因此你可以听到第 1 章。
解决方案:- 只需检查 Fragment 是否可见,然后执行其余操作。在你的情况下 TTS 东西。
- 扩展
FragmentPagerAdapter
.
覆盖 setUserVisibleHint()
.
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
super.setUserVisibleHint(isVisibleToUser);
Log.d(TAG, "setUserVisibleHint: " + isVisibleToUser);
}
现在您可以在 setUserVisibleHint() if(isVisibleToUser){}
而不是 onCreateView()
中执行您的操作了。
我想我无法解释这个问题,因为它很奇怪。
我需要一个类似于在线教程的应用程序,基本功能是在页面之间切换(我的情况是片段)并且应该读出内容。
所以,我关注了 Mr.Tamada " - The life saviour" tutorials The TTS and 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 文本)。
我真的不明白这是怎么回事。
当我从最近打开的应用程序列表中打开应用程序时,它正在阅读自己的文本。
如果可能请帮忙....谢谢..
嗯,问题是在开始时- Fragment1
与 Fragment2
一起加载。所以你可以听到来自 Fragment1
和 Fragment2
resp.
现在,当您导航到 Fragment2
[已经加载,因此您听不到第 2 章] 时,Fragment3
已加载,因此您可以听到第 3 章。
当您导航到 Fragment3
时,Fragment1
将被删除。
现在,如果您从 Fragment3
导航到 Fragment2
,则会加载 Fragment1
。因此你可以听到第 1 章。
解决方案:- 只需检查 Fragment 是否可见,然后执行其余操作。在你的情况下 TTS 东西。
- 扩展
FragmentPagerAdapter
. 覆盖
setUserVisibleHint()
.@Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); Log.d(TAG, "setUserVisibleHint: " + isVisibleToUser); }
现在您可以在 setUserVisibleHint() if(isVisibleToUser){}
而不是 onCreateView()
中执行您的操作了。