我想在函数执行过程中动态更改视图的内容。具体来说,我有一个记录用户音频的功能。这将被多次调用(比如说 2 次)。我想拥有它,以便用户只按一次记录按钮,并且视图会更改以引导用户完成整个过程,例如:
- 用户按下录制按钮。
- TextView1 出现并显示“录制音频第 1 部分”。
- 调用记录函数。
- TextView1 发生变化,因此它显示“音频第 1 部分录制成功”。
- 在 TextView1 下会弹出一个新的 TextView2,上面写着“录制音频第 2 部分”
- 再次调用记录函数。
- TextView2 发生变化,现在显示“音频 Part2 录制成功”
我已经尝试使用 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")
}
使用上面的代码,用户不会在文本视图中看到“之前”。他们只会看到“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 类