语音识别android应用程序

时间:2013-03-21 19:43:38

标签: c# visual-studio-2012 xamarin

当我按下发言按钮并在列表视图上打印结果时,我的应用程序识别语音,当我点击结果时,我想将它打印在烤面包上....

问题是,当我再次点击按钮时,它会打印新文本和旧文本,例如我第一次得到:(不,现在,知道)我点击否,它显示“现在”, 第二次给它(谷歌,好,谷歌)我按好,它打印“现在”然后“好”

我认为它记得整个listview,请你帮我解决这个问题,这是代码:

if (resultCode == Result.Ok)
{
    IList<System.String> matches = data.GetStringArrayListExtra(RecognizerIntent.ExtraResults);
    voice_list.Adapter = new ArrayAdapter<System.String>(this, Android.Resource.Layout.SimpleListItem1, matches);
    voice_list.ItemClick += delegate(object sender, Android.Widget.AdapterView.ItemClickEventArgs e)
    {
        var t = matches[e.Position];

        string TextToTranslate = t.ToString();

        Android.Widget.Toast.MakeText(this, TextToTranslate , Android.Widget.ToastLength.Long).Show();

    }; 
}

1 个答案:

答案 0 :(得分:0)

这是因为您每次处理结果时都会添加一个事件处理程序。 因此,第二次处理语音结果时,会向ItemClick事件添加另一个事件处理程序。当您单击某个项目时,这将导致2个事件处理程序。 尝试移动这部分。但请记住,如果您将其移至OnStart,当您从另一个屏幕返回时也会调用它。

不确定为什么再次显示第一个,但也许你必须在更改后触发NotifyDataSetChanged到适配器。

我个人更喜欢为BaseAdapter扩展的适配器创建一个新类,您将在其中处理包含项目和项目的列表。 (例如:Custom ListAdapter for your ListView