更新Android TextView

7

我有一个简单的安卓应用程序,我想在显示屏上写入一个单独字段的值,该字段属于不同的类。

使用简单文本视图,我可以写入字段的初始值,但我不知道如何在字段的值更改时更新显示屏上的文本。

顺便说一句,这是我的第一个安卓应用程序,所以我还很迷茫。

以下是我的活动代码:

public class findIT extends Activity {
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    PositionHolder ph = new PositionHolder();
    TextView tv = new TextView(this);
    setContentView(tv);
    //this.updateText();
    tv.setText("You are at "  + ph.getPosition());
  }
}

将代码发布到你尝试更新TextView的其他类中。 - Eric Nordvik
不知道PositionHolder类的作用和更改getPosition返回值的是什么,这个问题真的很难回答。当位置发生变化时,您需要从PositionHolder类通知findIT Activity。 - Brian Cooley
我相信Chris只是在尝试打印“Hello World”。除了findIT之外,我怀疑没有其他的活动。PositionHolder可能只是一个小的辅助类。 - eternalmatt
实际上,PositionHolder 是一个监听器类,从服务器获取手机的位置!它还有其他类的实例。它可以使用标准的 System.out.println 工作,但我只想使用我的手机应用程序,这样我就可以四处走动并获取我的位置更新!!!希望这有意义... - tropicana
顺便说一下,这不是GPS位置跟踪,而是用于室内跟踪的蓝牙技术... - tropicana
听起来不错。只是一个小建议,你应该打印到日志而不是system.out,这样你就可以在eclipse中或从adb中轻松地查看Log消息了。 - eternalmatt
3个回答

11

您需要在xml布局中创建一个TextView,如下所示:

<TextView 
android:id="@id/textView01"
android:text="Enter your initial text "
android:layout_width="wrap content"
android:layout_height="wrap content"
></TextView>

在setContentView()函数后,在你的类中编写以下内容:

TextView textView = (TextView) findViewById(R.id.textView01);
textView.setText("Enter whatever you Like!");

4

Chris....这里是开发App最基础的方法。将问题分解成三个部分:表示或视图、算法或模型,响应用户和系统事件的控制器。这样创建了“关注点分离”,使控制器拥有视图和模型。使用xml创建视图,例如main.xml。创建一个单独的类来完成工作,例如MyModel.java,当然还有控制器或Activity类,例如MyActivity.java。因此,数据从模型中获取,并传递给更新视图的控制器。

那么您的问题是如何从模型获取数据并更新视图。自然而然地,这将在控制器中进行,即您的Activity。最简单的方法是在Activity中放置一个按钮,当用户点击该按钮时,调用model.getLatestData()并更新视图。这是“PULL”数据。下一种方法是控制器每隔一分钟检查更新。这是“POLLING”数据。下一种方法是控制器注册对模型更改的兴趣,并等待模型发出信号进行更改,然后更新视图。这是异步从模型推送数据到控制器,可以使用观察者模式实现。

我知道当您正在努力使代码正常运行时,这些可能对您毫无意义,但希望这种方法能在未来某个时候给您灵感并变得有意义。

JAL


你有阅读任何博客以获取你的观点吗?还是这些只是来自多年的个人经验。只是问一下,因为我喜欢这篇文章。 - eternalmatt
@eternalmatt 很高兴你喜欢我的胡言乱语!我只是喜欢抽象化我的编码方式,而我一直在编码(从Z80汇编语言开始)。mCv来自我的Twisted OOP in C#教程。POLLING / PULLING / PUSHING是我读过的一本书的整个主题。OBSERVER显然来自于四人组。 - JAL
其实我使用的是一种MVC模式,但我的问题是我尝试在Android上做一个简单的应用程序,但无法更新文本视图的文本。记录器消息证明我想要显示的变量状态已经改变,但调用setView不会刷新屏幕输出。感谢您的回复,虽然种子已经种下,但您又加了一点水! - tropicana

0
你需要在XML中定义一个布局,然后当你创建TextView时,将其与其layoutID关联起来。像这样:
TextView tv = (TextView) findViewById(R.id.something);

如果需要的话,我可以再解释得更详细一些,但这会为你寻找更多答案提供一个起点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接