【问题标题】:Update Textview from function Android从函数 Android 更新 Textview
【发布时间】:2010-11-30 21:37:15
【问题描述】:

有人可以告诉我如何从一个函数中更新一个控件 Textview Android 吗?我在互联网上进行了深入搜索,看到很多人问同样的问题,我测试了线程但无法工作,有人有一个简单的工作示例吗?例如调用一个函数(在一个循环中运行多次)并将函数写入TextView,但问题是直到函数没有完成运行,它才会显示文本。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    while(condition) //here freezes the UI and the text in textview only shows when the loop ends
    {
        HardWork();  
    }

}

public void HardWork() {  

    txtProgreso.append("Test Line" + "\n\n");

};

提前致谢。

【问题讨论】:

  • 您能发布一些您尝试过的代码吗?我不确定我是否完全理解你想要做什么。
  • 好的,我编辑了帖子并添加了代码示例...
  • @seba123neo 请参考这个链接stackoverflow.com/questions/6898371/… 我也面临同样的问题你能帮我吗..并为我提供好的解决方案...谢谢

标签: java android multithreading eclipse textview


【解决方案1】:

如果我理解正确
这里使用AsyncTask,所以你可以在onProgressUpdate方法中更新textview

private class SomeTask extends AsyncTask<String, String, String> {
    @Override
        protected String doInBackground(String... params) {
         while(condition) {
         //do more
         publishProgress("Some text value to you textview");
        }
         return null;
     }

     @Override
     protected void onProgressUpdate(String... values) {
         txtProgreso.append(values[0]);
     }


 }

【讨论】:

  • 非常感谢,Labeeb P,现在可以正常工作了……解决方案是 AsyncTask
【解决方案2】:

我认为您要问的是“如何强制我的 TextView 显示其更新的内容而不将控制权返回给运行循环?” (即,从你的函数中返回)。

如果是这样,恐怕你倒霉了,Android的UI模型不可能做到这样的事情。最接近这一点的方法是跟踪您的循环状态,并设置一个计时器,该计时器将为您调用一个函数来更新 TextView。

这是一个例子。假设您想将文本“这是一个测试”放入 TextView,一次一个字符:

私有处理程序 mHandler = new Handler(); private String desiredText = new String("这是一个测试"); 私有 Runnable mUpdateTextView = new Runnable() { 公共无效运行(){ TextView textView = (TextView)findViewById(R.id.myTextView); int lengthSoFar = textView.getText().length(); if (lengthSoFar

我认为我的某些对象可见性在这里是不正确的,而且我没有方便测试的 Android 环境,但您大致了解。除了 Handler,您还可以使用 Timer,但它更重一些,因此这取决于您希望更新 UI 的频率。

【讨论】:

    【解决方案3】:

    您可以通过执行以下操作获得 textview。

    TextView myTextView = (TextView)findViewById(R.id.textViewsId);
    

    然后,您可以使用函数更改 TextView。例如,您可以使用以下代码设置文本。

    myTextView.setText("New text example");
    

    您正在尝试对控件进行任何其他更新吗?

    【讨论】:

    • 谢谢,我知道,问题是我运行了一个函数,这个函数在 TextView 中写入了几行文本,但是当我运行这个函数时,UI 冻结并且不显示文本,直到它结束了......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多