3

テキスト読み上げで奇妙な経験をしています。

私のコードを見てください:

Button b;
TextView title, body;
TextToSpeech tts;

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.popups);
    b = (Button) findViewById(R.id.buttonok);
    title = (TextView) findViewById(R.id.textViewtitle);
    body = (TextView) findViewById(R.id.textViewbody);
    b.setText("ok");
    title.setText(Receive.address);
    body.setText(Receive.body);
    tts = new TextToSpeech(Popup.this, new TextToSpeech.OnInitListener() {

        public void onInit(int status) {
            // TODO Auto-generated method stub
            if (status != TextToSpeech.ERROR) {
                tts.setLanguage(Locale.US);
            }
        }
    });
            play();//this is not working??!!i don't know why
    b.performClick();//even this is not working
            /* but when i click this button it works??? how and why?*/
    b.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            play(); // Popup.this.finish();
        }
    });
}

private void play() {
    // TODO Auto-generated method stub
    tts.speak(Receive.body, TextToSpeech.QUEUE_FLUSH, null);

}

テキスト読み上げは、ボタンをクリックした場合にのみ正常に機能しますが、このボタンをクリックしないと、通常のコード内に tts.speak() を記述しないと機能しません...なぜですか?

よろしくチャーリー

4

2 に答える 2

2
b.performClick();//even this is not working
        /* but when i click this button it works??? how and why?*/
b.setOnClickListener(new View.OnClickListener() {

    public void onClick(View v) {
        play(); // Popup.this.finish();
    }
});

b.performClick()を設定する前にでクリックを実行していますsetOnClickListener。また、onResume()メソッドでそのような呼び出しを行うことをお勧めします。OnCreate は、ビューをバインドしてアクティビティを準備するために使用することを意図しています。このonResume()メソッドは、ビューを前景でユーザーに表示する前に呼び出されるため、このコードを配置するのに最適な場所です。

アクティビティのライフサイクルを見てみましょう。

アクティビティ

于 2013-03-30T16:43:46.387 に答える