関数の実行中にビューの内容を動的に変更したいと考えています。具体的には、ユーザーからの音声を録音する機能があります。これは複数回呼び出されます (2 としましょう)。ユーザーが記録ボタンを1回だけ押すと、ビューが変更されてユーザーがプロセスをガイドできるようにしたいのです。たとえば、次のようになります。
- ユーザーが記録ボタンを押します。
- TextView1 が表示され、"Record audio part 1" と表示されます。
- レコード関数が呼び出されます。
- TextView1 が「オーディオ パート 1 が正常に録音されました」と表示されるように変更されます。
- TextView1 の下に、新しい TextView2 がポップアップし、「Record Audio part 2」と表示されます。
- レコード関数が再度呼び出されます。
- 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 クラスを設計しました