Я пытаюсь использовать движок TextToSpeech в RecyclerView, все работает нормально, но единственная проблема в том, что если я покидаю текущую активность, у меня есть утечка активности. Итак, я знаю, что мне нужно вызвать метод выключения для механизма TextToSpeech, но вопрос в том, где и как я это делаю? Спасибо
public class RecylerViewAdapter extends
RecyclerView.Adapter<RecylerViewAdapter.RecylerViewV_VH> {
Context context;
String[] strings = {"one", "two", "tree"};
public RecylerViewAdapter(Context context) {
this.context = context;
}
public RecylerViewV_VH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recycler_view, parent, false);
return new RecylerViewV_VH(view);
}
@Override
public void onBindViewHolder(@NonNull final RecylerViewV_VH holder, final int position) {
holder.button.setText(strings[position]);
holder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
holder.tts.speak(strings[position], TextToSpeech.QUEUE_FLUSH, null);
}
});
}
@Override
public int getItemCount() {
return strings.length;
}
public class RecylerViewV_VH extends RecyclerView.ViewHolder {
Button button;
TextToSpeech tts;
public RecylerViewV_VH(@NonNull View itemView) {
super(itemView);
button = itemView.findViewById(R.id.button);
tts = new TextToSpeech(context, new TextToSpeech.OnInitListener() {
public void onInit(int status) {
// TODO Auto-generated method stub
if (status == TextToSpeech.SUCCESS) {
int result = tts.setLanguage(Locale.US);
if (result == TextToSpeech.LANG_MISSING_DATA ||
result == TextToSpeech.LANG_NOT_SUPPORTED) {
Log.e("error", "This Language is not supported");
} else {
}
} else
Log.e("error", "Initilization Failed!");
}
});
}
}
}