我正在读一本关于构建名为" Dot Smasher的应用程序的书。"
我决定通过在画布上方添加一个按钮来完成其中一项任务。 我决定使用LinearLayout并执行以下操作:
public class MainActivity extends AppCompatActivity {
private Timer timer;
private DotSmasherCanvas canvas;
private DotSmasherTimerTask task;
private Button button;
private LinearLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTitle("DotSmasher");
canvas = new DotSmasherCanvas(getBaseContext());
timer = new Timer();
task = new DotSmasherTimerTask(canvas);
timer.schedule(task, 0, 1500);
button = (Button) findViewById (R.id.button);
layout = (LinearLayout) findViewById(R.id.layout);
layout.addView(canvas);
setContentView(R.layout.activity_main);
}
}
这是xml文件 - activity_main.xml:
如果我只做 setContentView(canvas);
,我能够让它工作但不是上面,我做错了什么?
在我尝试运行之前,Android Studio中没有错误显示。
答案 0 :(得分:1)
您似乎不了解布局的工作原理。您在调用setContentView之前调用findViewById。这不起作用 - 在设置内容视图之前,没有地方可以搜索视图。你不应该混合使用xml布局和编程视图,除非你有一个非常动态的布局 - 要么你的DotSmasherCanvas应该在布局中,要么它们都不应该在xml中(可能是第一个)。