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

これは、結果を処理するたびにイベントハンドラーを追加しているためです。したがって、音声結果を2回目に処理すると、ItemClickイベントに別のイベントハンドラーが追加されます。これにより、アイテムをクリックすると2つのイベントハンドラーが作成されます。この部分を動かしてみてください。ただし、OnStartに移動すると、別の画面から戻ってきたときにも呼び出されることに注意してください。

最初のものが再び表示される理由はよくわかりませんが、変更後にアダプターに対してNotifyDataSetChangedをトリガーする必要がある場合もあります。

私は個人的に、BaseAdapterから拡張された、アダプター用の新しいクラスを作成することを好みます。このクラスでは、アイテムとクリックされたアイテムでリストを処理します。(例:ListViewのカスタムListAdapter

于 2013-03-22T23:39:41.520 に答える