Android TTS没有读取正确片段的文本

Android TTS没有读取正确片段的文本,android,android-fragments,text-to-speech,Android,Android Fragments,Text To Speech,我想我无法解释这个问题,因为它很奇怪 我需要一个类似于在线教程的应用程序,基本功能是在页面之间切换(在我的例子中是片段),内容应该被读出 因此,我遵循了《生命救世主》教程,并将两者合并 格言是以片段的形式读取数据 代码: 文本视图中的文本正在读取。但只有当我向后滑动时,第一个片段的文本才会在第二个片段中读取 片段3-->片段2(此处读取片段1文本) 我真的不明白发生了什么事 当我从最近打开的应用列表中打开应用时,它正在读取自己的文本 如果可能的话,请提供帮助。…谢谢。问题是,在开始时-Fragm

我想我无法解释这个问题,因为它很奇怪

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

因此,我遵循了《生命救世主》教程,并将两者合并

格言是以片段的形式读取数据

代码:

文本视图中的文本正在读取。但只有当我向后滑动时,第一个片段的文本才会在第二个片段中读取

片段3-->片段2(此处读取片段1文本)

我真的不明白发生了什么事

当我从最近打开的应用列表中打开应用时,它正在读取自己的文本


如果可能的话,请提供帮助。…谢谢。

问题是,在开始时-
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);
    }