首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TTS没有读取适当片段的文本。

TTS没有读取适当片段的文本。
EN

Stack Overflow用户
提问于 2015-10-29 09:49:54
回答 1查看 748关注 0票数 0

我想我不会解释这个问题,因为它很奇怪。

我需要一个类似在线教程的应用程序,基本功能是在页面之间切换(在我的例子中是片段),内容应该被读出。

因此,我遵循了Mr.Tamada“-生命救世主”的教程TTS片断,我把它们合并了起来。

座右铭是以片段形式读取数据。

代码:

代码语言:javascript
复制
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 ..。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-30 13:43:28

问题是,在开始的时候- Fragment1Fragment2一起加载。这样你就可以听到Fragment1Fragment2的内容。

现在,当您导航到已经加载的Fragment2时,您无法听到chapter2,那么Fragment3就被加载,这样您就可以听到Chapter3了。

导航到Fragment3时,Fragment1将被删除。

现在,如果您从Fragment3导航到Fragment2,那么将加载Fragment1。因此,你可以听到chapter1。

解决方案:-只需检查片段是否可见,然后执行其余操作。以你为例TTS的事。

  1. 扩展FragmentPagerAdapter
  2. 覆盖setUserVisibleHint()。 @Override void setUserVisibleHint(boolean ){ super.setUserVisibleHint( isVisibleToUser);Log.d(标记,"setUserVisibleHint:“+ isVisibleToUser);}

现在您可以在setUserVisibleHint() if(isVisibleToUser){}中执行您的操作,而不是onCreateView(),好的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33410850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档