如何从活动子项更新文本视图

时间:2014-05-02 09:17:46

标签: android textview delay

我一直在尝试从这里发布的答案解决方案,但一切都不起作用,到目前为止,我已尝试使用以下

  • 处理程序
  • 可运行
  • 计时器(生成此错误“仅创建视图层次结构的原始线程可以触及其视图”)

但是我的TextView没有更新,这是我的代码

在我的onCreate上(假设这是B类,A类扩展活动,B类扩展A)

{
     \\some code
     mHandler = new Handler();   
     currentDate.setText(" " + day + " | " + month + " " + monthDay + ", " + year);
     showTime();
} 

并在同一个班级

private void showTime(){
        try{
            mHandler.post(new Runnable(){
                @Override
                public void run() {
                    timeUpdater();
                    mHandler.postDelayed(this, 500);
                    }
            });
        }catch(Exception e){
            e.printStackTrace();
        }
        }

    private void timeUpdater(){
        dClock.setText(new SimpleDateFormat("hh:mm:ss a").format(calendar.getTime()) + " ");
    }

我想将此问题发布在与此相关的其他问题上,但我认为这违反了规则,所以我决定自己发布一个问题,任何解决方案都将受到高度赞赏!

1 个答案:

答案 0 :(得分:0)

能够通过这样做解决我的问题

protected void onCreate()
{
//some code
calendar = Calendar.getInstance();
mHandler.post(myRun);
}

private Runnable myRun = new Runnable(){
    public void run(){
        dClock.setText(formattedTime());
        mHandler.postDelayed(this, 1000);
    }
};

这种获取时间的方法有些错误(我认为它只是从Calendar实例初始化时获取日历实例的值),反过来,即使Runnable工作正常,textview似乎也没有更新,因为值是相同的,永远不会更改

public String formattedTime(){
return (new SimpleDateFormat("hh:mm:ss a").format(calendar.getTime()) + " ").toString();
}

虽然这个,但是使用postDelayed函数更新(每次都获取新的日历实例)

public String formattedTime(){
return (new SimpleDateFormat("hh:mm:ss a").format(Calendar.getInstance().getTime()) + " ").toString();
}

我知道有一个数字时钟小部件可以添加到视图中,但我想要一些我可以随意操作的内容(无需添加额外的类),谢谢你的回答!