Итак, я пытался изменить язык TTS внутри фрагмента, но он не работает, но тот же код отлично работает внутри MainActivity. Я не понимаю, почему. Я проверил другие решения, но ни одно из них не сработало для меня. Я пробовал разные решение, solution, но даже это не работает.
public class HomeFragment extends Fragment implements TextToSpeech.OnInitListener{
private static final int TTS_DATA_CHECK = 1;
private TextToSpeech engine;
private SettingsViewModel settingsViewModel;
private EditText textMsg;
private Button button;
public View onCreateView(@NonNull LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
engine = new TextToSpeech(getContext(),this);
settingsViewModel = new ViewModelProvider(getActivity()).get(SettingsViewModel.class);
return inflater.inflate(R.layout.fragment_home, container, false);
}
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
textMsg = view.findViewById(R.id.textMsg);
button = view.findViewById(R.id.playButton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
engine.speak(textMsg.getText().toString(), TextToSpeech.QUEUE_FLUSH, null,null);
}
});
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
settingsViewModel.getLanguage().observe(getViewLifecycleOwner(), new Observer<String>() {
@Override
public void onChanged(String s) {
Log.d("LANGUAGE_SELECTED",s);
switch (s){
case "ENGLISH":
engine.setLanguage(Locale.ENGLISH);
break;
case "FRENCH":
engine.setLanguage(Locale.FRENCH);
break;
}
}
});
}
@Override
public void onInit(int status) {
if(status==TextToSpeech.SUCCESS){
int result = engine.setLanguage(Locale.ENGLISH);
if(result == TextToSpeech.LANG_MISSING_DATA
|| result== TextToSpeech.LANG_NOT_SUPPORTED){
Toast.makeText(getContext(),"Not supported",Toast.LENGTH_LONG).show();
}
}else{
Toast.makeText(getContext(),"TTS is missing",Toast.LENGTH_LONG).show();
}
}
}