我是Android开发的新手,需要我快速开发简单的应用程序。我需要动态生成views
的列表,并在每个列表中使用计时器,所以我当前的代码如下:
public class MainActivity extends AppCompatActivity {
private List<TextView> times = new ArrayList<>();
private Handler handler;
private void initWatchlist() {
LinearLayout line = new LinearLayout(this);
line.setOrientation(LinearLayout.HORIZONTAL);
TextView time = new TextView(this);
time.setText(sdf.format(new Date()));
time.setTextSize(32);
line.addView(time);
times.add(time);
//add couple of other views to line
//...
LinearLayout watchlist = findViewById(R.id.watchlist);
watchlist.addView(line);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWatchlist();
Thread thread = new Thread(){
private Calendar previousDate = Calendar.getInstance();
public void run(){
if (previousDate.get(Calendar.MINUTE) != Calendar.getInstance().get(Calendar.MINUTE)) {
for (TextView textView : times) {
textView.setText(sdf.format(new Date()));
}
}
}
};
handler = new Handler();
handler.post(thread);
}
//other code
}
所以问题是我的Thread
似乎实际上什么都没做。我没有看到自己的textviews
更新时间。我在做什么错了?
答案 0 :(得分:1)
要更新UI,您需要在主线程上运行代码。一种方法是创建一个使用MainLooper的处理程序,如下所示
Handler mainHandler = new Handler(Looper.getMainLooper());
由于您处于活动状态,因此也可以使用https://github.com/atwwei/ngx-dfp/blob/master/src/app/page/page.component.html#L14
答案 1 :(得分:0)
我很傻。我的线程实际上很快完成了,因为它不包含while(true){}之类的东西。
通过在我的thread.run()函数中添加额外的handler.postDelayed(thread,1000)解决了该问题。