0

関数の実行中にビューの内容を動的に変更したいと考えています。具体的には、ユーザーからの音声を録音する機能があります。これは複数回呼び出されます (2 としましょう)。ユーザーが記録ボタンを1回だけ押すと、ビューが変更されてユーザーがプロセスをガイドできるようにしたいのです。たとえば、次のようになります。

  1. ユーザーが記録ボタンを押します。
  2. TextView1 が表示され、"Record audio part 1" と表示されます。
  3. レコード関数が呼び出されます。
  4. TextView1 が「オーディオ パート 1 が正常に録音されました」と表示されるように変更されます。
  5. TextView1 の下に、新しい TextView2 がポップアップし、「Record Audio part 2」と表示されます。
  6. レコード関数が再度呼び出されます。
  7. TextView2 が変更され、「Audio Part2 Recorded successfully」と表示されるようになりました

これを setContentView() メソッドで実装しようとしましたが、ビューはユーザーに変更されず、最後に表示されるはずのビューが表示されます (つまり、パート 1 は正常に記録され、パート 2 は正常に記録されました)。私が読んだことから、 setContentView() はすべての関数の実行が完了するまでビューを画面に描画しないため、これが発生することを理解しています。

Androidでビューを動的に更新する方法が必要ですが、何時間も検索した後、探しているものがまったく見つかりません。どんな提案でも大歓迎です。

編集:私はすでにテキストを設定しようとしましたが、上記のように機能しません。setText はテキスト ビューのコンテンツを変更しますが、それは他のすべての操作が終了した後にのみ行われます。

Function(View view)
{
    TextView tv = findViewById(R.Id.textView1);
    tv.setText("Before");
    record();//records two seconds of audio
    tv.setText("After")
}

上記のコードでは、ユーザーはテキスト ビューに "Before" を表示しません。関数全体の実行が終了したときにのみ画面に描画されるため、「After」のみが表示されます。

編集 2: 数日間の研削の後、解決策を見つけました。AndroidでAsyncTaskを使用しています。以前はこのクラスを知らなかったので、なぜそれを行う方法がわかりませんでした。同様の問題を抱えている人にとって、ここに私が取り組んでいる私の解決策があります。

//In Activity
public void whenButtonPushed(View view)
{
    new RecordAsyncTask(this,RecordAudio.this).execute();
    TextView tv = (TextView)findViewById(R.id.TextView1);
    tv.setText("Before"); // Before appears on screen to user and is later replaced with after from within the AsyncTask
}

AsyncTask を呼び出すときに、コンテキストとアクティビティのパラメーターを渡します。これは、タスクの実行が終了したときに、必要に応じて画面を更新できるようにするためです。AsyncTaskを使用して、この Refresh Game Score TextViewに基づいて AsyncTask クラスを設計しました

4

1 に答える 1

0

テキストをプログラム的に配置したいので、XML レイアウト ファイルではなくコードに適用する必要があります。

したがって、TextViewレイアウト内に作成する必要があり、次の方法でコード内で見つけます。

TextView tv = (TextView)findViewById(R.id.your_text_view_id);

次に、関数の実行中に、次のコマンドでそれに応じてテキストを変更します。

tv.setText("desired text");
于 2013-03-06T12:09:02.373 に答える