Java 使用timer-Android添加布局视图
我有一个功能可以将按钮添加到我的活动布局中:Java 使用timer-Android添加布局视图,java,android,timer,Java,Android,Timer,我有一个功能可以将按钮添加到我的活动布局中: void addLeftButton() { Button btn = new Button(this); int height = 200; int width = 300; btn.setLayoutParams(new LinearLayout.LayoutParams(width, height)); btn.setTag(10); RelativeLayout layout = (Relati
void addLeftButton() {
Button btn = new Button(this);
int height = 200;
int width = 300;
btn.setLayoutParams(new LinearLayout.LayoutParams(width, height));
btn.setTag(10);
RelativeLayout layout = (RelativeLayout) findViewById(R.id.activity_main);
layout.addView(btn);
}
我使用如下计时器调用此函数:
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
addLeftButton();
}
},0,10);
由于某些原因,应用程序会立即启动和停止。如果我从onCreate
调用一次按钮函数,那么我会按预期添加按钮
知道为什么用计时器调用它不起作用吗?我认为nbokmans是对的,问题应该是因为您试图从非UI线程修改UI元素。您可以使用
runOnUiThread
代替计时器:
final Handler mHandler = new Handler();
runOnUiThread(new Runnable() {
@Override
public void run() {
Button btn = new Button(StartActivity.this);
int height = 200;
int width = 300;
btn.setLayoutParams(new LinearLayout.LayoutParams(width, height));
btn.setTag(10);
ConstraintLayout layout = (ConstraintLayout) findViewById(R.id.deneme);
layout.addView(btn);
mHandler.postDelayed(this, 10);
}
});
读取LogCat中的错误消息。我猜你不能从非UI线程修改UI。当应用程序停止时,你会得到什么样的异常/日志?您在哪里创建计时器,是否可以在布局膨胀之前创建它,使findViewById返回null?@merterpam-我创建了计时器“onCreate”方法。