Android setText()会覆盖自己吗?

时间:2013-02-23 21:17:44

标签: android printing settext

我对Android编程有点新意,我想要的只是将一些文本发送到屏幕。此功能应该适用于打开和关闭屏幕的功能。当你打开它时,它打开时的时间戳,并在屏幕上打印1。此外,当您关闭它时,它会关闭时间戳并在屏幕上打印0。我只是“附加”到上一个时间戳有点麻烦,这意味着我想在Android的屏幕关闭和屏幕打开时不断记录。它会一直覆盖自己。这是我的尝试:

protected void onResume(){ //this is for when the screen is turned back on
    Time now = new Time();
    if(!ScreenReceiver.screenOn){
        now.setToNow();
        String lsNow = now.format("%m-%d-%Y %I:%M:%S");
        LinearLayout lView = new LinearLayout(this);
        myText = new TextView(this);
        myText.setText(lsNow + ", 1");
        lView.addView(myText);
        setContentView(lView);
... //more code here
}

 protected void onPause(){
    Time now = new Time();
    if(ScreenReceiver.screenOn){
        now.setToNow();

        String lsNow = now.format("%m-%d-%Y %I:%M:%S");
        LinearLayout lView = new LinearLayout(this);
        myText = new TextView(this);
        myText.setText(lsNow + ", 0");
        lView.addView(myText);
        setContentView(lView);
...//more code here
}

如果有人知道解决方案,那就太棒了!谢谢!

2 个答案:

答案 0 :(得分:0)

  1. 您正在创建一个新布局,然后为该布局设置内容视图,不仅会覆盖TextView,而且还会覆盖其他所有内容,因为整个布局正在被替换。而是继续使用一个TextView,一个布局。
  2. TextView中有一个append()方法可以追加。
  3. 我也会制作一个共享方法:

    public void logTime (boolean screen)
    {
      Time now = new Time();
      now.setToNow();
    
      String lsNow = now.format("%m-%d-%Y %I:%M:%S");
      TextView myText = (TextView) findViewById (R.id.myText);
      myText.append (" " + lsNow + (screen ? "0" : "1"));
    }
    

    然后使用ScreenReceiver.screenOn作为参数调用。

答案 1 :(得分:0)

您的代码目前正在重置活动的整个布局,以便恢复和暂停。当您致电setContentView时,您实际上是使用您创建的新布局交换旧布局。在资源文件夹中创建一个布局,然后在活动的onCreate中调用setContentView方法。之后,使用FindviewById<TextView>获取对布局中TextView的引用。您需要在布局文件中声明元素的ID。

为了将文本附加到控件,您必须使用当前文本,然后将新信息添加到它:textView.setText(textView.getText() + "new text"),以便不覆盖旧数据。