【问题标题】:Android change view content as function is carried outAndroid 更改视图内容作为功能执行
【发布时间】:2013-03-06 12:04:23
【问题描述】:

我想在函数执行过程中动态更改视图的内容。 具体来说,我有一个记录用户音频的功能。这将被多次调用(比如说 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 时,我将上下文和活动的参数传递给它。因此,当它完成其任务时,它可以根据需要更新屏幕。我基于这个Refresh Game Score TextView using AsyncTask设计了我的 AsyncTask 类

【问题讨论】:

标签: java android xml dynamic


【解决方案1】:

由于您希望将文本应用到您的代码中,而不是 XML 布局文件中。

所以你必须在你的布局中创建一个TextView,在你的代码中找到它:

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

然后,在你的函数执行期间,相应地更改它的文本 这个命令:

tv.setText("desired text");

【讨论】:

  • 所以不需要重新添加TextView tv?即使包含 tv.setText("whatever") 的函数仍在执行其他操作,屏幕上的 TextView 也会自动更新?
  • 我没问你?执行其他操作是什么意思?在您希望它发生的位置设置 setText 方法。
  • 从您的编辑中,您的 TextView 更新应该在 record() 方法中执行,以便您可以在此方法运行时看到更新。
  • 我已经尝试过这个,结果与描述的相同。将文本设置为“之前”从未见过,用户只看到“之后”。
  • 我的代码和我描述的一样。我认为您误解了问题或误解了 setText 方法如何与视图一起使用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
相关资源
最近更新 更多