Отображение тоста в текстовом формате, если не поддерживается

При добавлении кнопки Toast to TTS в Fragement я получаю эту ошибку «Невозможно разрешить метод getApplicationContext ()», даже когда пробовал getActivty(). и getContext(). , затем появилось больше ошибок, это тост:

Toast.makeText (getApplicationContext (), «Не поддерживается», Toast.LENGTH_SHORT) .show ();

Вот код фрагментации:

  TextToSpeech toSpeech;
    int result;
    EditText editText;
    String text;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_home, container, false);


        editText = v.findViewById(R.id.editText);

        toSpeech = new TextToSpeech(HomeFragment.this, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if (status == TextToSpeech.SUCCESS) {
                    Locale locale = new Locale("tr-TR");
                    int result = toSpeech.setLanguage(locale);
                } else {
                    Toast.makeText(getApplicationContext(), "Not Supported", Toast.LENGTH_SHORT).show(); 
                }
            }
        });


        return v;
    }

    public void TTS(View view) {
        switch (view.getId()) {
            case R.id.bplay:
                if (result == TextToSpeech.LANG_MISSING_DATA || result == TextToSpeech.LANG_NOT_SUPPORTED) {
                } else {
                    text = editText.getText().toString();
                    toSpeech.speak(text, TextToSpeech.QUEUE_FLUSH, null);
                    toSpeech.setSpeechRate((float) 0.8);
                    toSpeech.setPitch((float) 0.7);

                }
                break;
        }
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (toSpeech != null) ;
        {
            assert toSpeech != null;
            toSpeech.stop();
            toSpeech.shutdown();
        }

    }

}

Возможный дубликат Тост внутри метода onClick во фрагменте

MuhammadAliJr 02.05.2018 12:41
0
1
104
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

new TextToSpeech(HomeFragment.this

Вы должны использовать getActivity().

Return the FragmentActivity this fragment is currently associated with.

Toast.makeText(getActivity(), "Not Supported", Toast.LENGTH_SHORT).show(); 
new TextToSpeech(getActivity()

Ну наконец то

toSpeech = new TextToSpeech(getActivity(), new TextToSpeech.OnInitListener() {
        @Override
        public void onInit(int status) {
            if (status == TextToSpeech.SUCCESS) {
                Locale locale = new Locale("tr-TR");
                int result = toSpeech.setLanguage(locale);
            } else {
                Toast.makeText(getActivity(), "Not Supported", Toast.LENGTH_SHORT).show(); 
            }
        }
    });

First of all,

В вашем коде вы указали HomeFragment.this, который не соответствует фрагменту.

toSpeech = new TextToSpeech(**HomeFragment.this**, new TextToSpeech.OnInitListener() {
            @Override
            public void onInit(int status) {
                if (status == TextToSpeech.SUCCESS) {
                    Locale locale = new Locale("tr-TR");
                    int result = toSpeech.setLanguage(locale);
                } else {
                    Toast.makeText(getApplicationContext(), "Not Supported", Toast.LENGTH_SHORT).show(); 
                }
            }
        });

Вам нужно изменить HomeFragment.this с помощью getActivity (), а также изменить getApplicationContext () с getActivity () в вашем коде, как показано ниже: -

toSpeech = new TextToSpeech(getActivity(), new TextToSpeech.OnInitListener() {
                @Override
                public void onInit(int status) {
                    if (status == TextToSpeech.SUCCESS) {
                        Locale locale = new Locale("tr-TR");
                        int result = toSpeech.setLanguage(locale);
                    } else {
                        Toast.makeText(getActivity(), "Not Supported", Toast.LENGTH_SHORT).show(); 
                    }
                }
            });

Second Option

Если в случае, если по-прежнему Toast не работает должным образом с помощью getActivity (), вы также можете попробовать

getActivity().getBaseContext();

как показано ниже: -

Toast.makeText(getActivity().getBaseContext(), "Not Supported", Toast.LENGTH_SHORT).show();

Первый тоже работает, я просто изменил "getActivity", спасибо.

Cristina99 02.05.2018 13:08

@ Cristina99 Я также дал верный ответ с дополнительной информацией и пониманием. а вы уже приняли мой ответ, так? Почему?

Janvi Vyas 02.05.2018 13:10

Другие вопросы по теме