Android更改视图内容作为功能执行

时间:2013-03-06 12:04:24

标签: java android xml dynamic

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

  1. 用户按下记录按钮。
  2. 出现TextView1并显示“录制音频声部1”。
  3. 调用记录功能。
  4. TextView1发生变化,表示“音频第1部分已成功录制”。
  5. 在TextView1下面弹出一个新的TextView2,说“录制音频第2部分”
  6. 再次调用记录功能。
  7. TextView2更改,现在说“Audio Part2 Recorded successfully”
  8. 我已尝试使用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")
    }
    

    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类

1 个答案:

答案 0 :(得分:0)

由于您希望以文本方式放置文本,因此应将其应用于代码而不是XML布局文件中。

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

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

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

tv.setText("desired text");