Android TTS没有读取正确片段的文本
我想我无法解释这个问题,因为它很奇怪 我需要一个类似于在线教程的应用程序,基本功能是在页面之间切换(在我的例子中是片段),内容应该被读出 因此,我遵循了《生命救世主》教程,并将两者合并 格言是以片段的形式读取数据 代码: 文本视图中的文本正在读取。但只有当我向后滑动时,第一个片段的文本才会在第二个片段中读取 片段3-->片段2(此处读取片段1文本) 我真的不明白发生了什么事 当我从最近打开的应用列表中打开应用时,它正在读取自己的文本Android TTS没有读取正确片段的文本,android,android-fragments,text-to-speech,Android,Android Fragments,Text To Speech,我想我无法解释这个问题,因为它很奇怪 我需要一个类似于在线教程的应用程序,基本功能是在页面之间切换(在我的例子中是片段),内容应该被读出 因此,我遵循了《生命救世主》教程,并将两者合并 格言是以片段的形式读取数据 代码: 文本视图中的文本正在读取。但只有当我向后滑动时,第一个片段的文本才会在第二个片段中读取 片段3-->片段2(此处读取片段1文本) 我真的不明白发生了什么事 当我从最近打开的应用列表中打开应用时,它正在读取自己的文本 如果可能的话,请提供帮助。…谢谢。问题是,在开始时-Fragm
如果可能的话,请提供帮助。…谢谢。问题是,在开始时-
Fragment1
与Fragment2
一起加载。因此,您可以分别听到Fragment1
和Fragment2
的内容
现在,当您导航到Fragment2
[已加载,因此您无法听到第2章]时,将加载Fragment3
,以便您可以听到第3章
导航到Fragment3
时,将删除Fragment1
现在,如果从Fragment3
导航到Fragment2
,则加载Fragment1
。因此你可以听到第1章
解决方案:-只需检查片段是否可见,然后执行其余操作。在你的情况下,这是件好事
FragmentPagerAdapter
setUserVisibleHint()
现在你可以在
setUserVisibleHint()中执行你的操作,如果(isVisibleToUser){}
而不是onCreateView()
好的。如何初始化视图?现在我在onCreateView()
中执行它,但它正在执行setUserVisibleHint
首先,我已经尝试了,但仍然得到了NPE
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());
}
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser)
{
super.setUserVisibleHint(isVisibleToUser);
Log.d(TAG, "setUserVisibleHint: " + isVisibleToUser);
}