我已经在选项卡式片段中使用RecyclerView为我的应用程序开发了一个模块。
场景
使用RecyclerView在每个片段中显示了多个动态加载的图像。当用户点击任何图像时,系统都会使用TextToSpeech说出有关该图像的一些信息。
当前代码
我为RecyclerView使用了一个适配器类,它成功地将图像加载到视图中。代码如下:
import android.speech.tts.TextToSpeech;
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{
private ArrayList<CreateList> galleryList;
private Context context;
TextToSpeech tts;
public MyAdapter(Context context, ArrayList<CreateList> galleryList) {
this.galleryList = galleryList;
this.context = context;
}
@Override
public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
.....
}
@Override
public void onBindViewHolder(MyAdapter.ViewHolder viewHolder, int i) {
.....
.....
viewHolder.img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
.....
.....
tts=new TextToSpeech(context, new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
// TODO Auto-generated method stub
if(status !=TextToSpeech.ERROR){
tts.setLanguage(Locale.UK);
}
}
});
tts.setPitch(pitch);
tts.setSpeechRate(speechRate);
tts.speak(StringToSpeak, TextToSpeech.QUEUE_FLUSH, null);
}
@Override
public int getItemCount() {
return galleryList.size();
}
.....
.....
}正如您所看到的,我已经在viewHolder上添加了一个OnClickListener,它用onInitListener初始化TTS对象并说出信息。但是,每当我点击片段中的任何图像/视图/项目时,它都不能说明任何问题。在LogCat中没有崩溃,也没有异常,我得到的只是跟随其他消息的消息:
I/TextToSpeech: Sucessfully bound to com.google.android.tts
W/TextToSpeech: speak failed: not bound to TTS engine我试着调试应用程序,发现在初始化TTS对象时,它在下面这一行返回engine=Null:
tts=new TextToSpeech(context, new TextToSpeech.OnInitListener() {
....});在扩展Activity的其他类中,代码和TTS工作得很好,但在我的Adapter/Non-Activity类中,它不会启动TTS,因为它无法绑定到TTS引擎。我尝试用下面的函数在适配器类中实现接口implements TextToSpeech.OnInitListener:
@Override
public void onInit(int status) {
if (status == TextToSpeech.SUCCESS) {
tts.setLanguage(Locale.UK);
}
}但没有结果:(我还试图创建一个扩展Activity的抽象类,它在其OnCreate()中实现TTS,并包含一个自定义函数SpeakMessage(),我尝试在我的Adapter class中调用该函数,但失败了。我花了几个小时试图弄清楚这个问题和它的解决方案,在StackOverFlow和其他网站上深入研究了每一个与TTS相关的问题,但是没有找到任何解决我的问题的方法。请帮我找出问题所在并找出正确的解决方案。提前谢谢你。还有一件事,在视图的同一动作监听器中,使用MediaPlayer播放录制的音频消息工作得很完美。唯一的问题是使用TTS说字符串消息。
https://stackoverflow.com/questions/41584831
复制相似问题