0

我想在函数执行过程中动态更改视图的内容。具体来说,我有一个记录用户音频的功能。这将被多次调用(比如说 2 次)。我想拥有它,以便用户只按一次记录按钮,并且视图会更改以引导用户完成整个过程,例如:

  1. 用户按下录制按钮。
  2. TextView1 出现并显示“录制音频第 1 部分”。
  3. 调用记录函数。
  4. TextView1 发生变化,因此它显示“音频第 1 部分录制成功”。
  5. 在 TextView1 下会​​弹出一个新的 TextView2,上面写着“录制音频第 2 部分”
  6. 再次调用记录函数。
  7. 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 类

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 回答