Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用timer-Android添加布局视图_Java_Android_Timer - Fatal编程技术网

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”方法。