0

当我按下说话按钮并在列表视图上打印结果时,我的应用程序识别语音,当我单击结果时,我希望它在吐司上打印......

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

我想它记得整个列表视图,你能帮我解决这个问题吗,这是代码:

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();

    }; 
}
4

1 回答 1

0

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

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

我个人更喜欢为适配器创建一个从 BaseAdapter 扩展的新类,您将在其中处理包含 item 和 itemsclicked 的列表。(例如:您的 ListView 的自定义 ListAdapter

于 2013-03-22T23:39:41.520 回答