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 文本)。

我真的不明白这是怎么回事。

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

如果可能请帮忙....谢谢..

嗯,问题是在开始时- Fragment1Fragment2 一起加载。所以你可以听到来自 Fragment1Fragment2 resp.

的内容

现在,当您导航到 Fragment2 [已经加载,因此您听不到第 2 章] 时,Fragment3 已加载,因此您可以听到第 3 章。

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

现在,如果您从 Fragment3 导航到 Fragment2,则会加载 Fragment1。因此你可以听到第 1 章。

解决方案:- 只需检查 Fragment 是否可见,然后执行其余操作。在你的情况下 TTS 东西。

  1. 扩展 FragmentPagerAdapter.
  2. 覆盖 setUserVisibleHint().

    @Override
    public void setUserVisibleHint(boolean isVisibleToUser)
    {
        super.setUserVisibleHint(isVisibleToUser);
        Log.d(TAG, "setUserVisibleHint: " + isVisibleToUser);
    }
    

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