为什么这段代码不起作用?我已经坚持了2天。
public class SongsActivity extends Activity{
DemoView demoview ;
FinalView finalview;
ViewFlipper c ;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
demoview = new DemoView(this);
finalview = new FinalView(this);
// adding view to the viewflipper
c.addView(demoview,0);
c.addView(finalview, 1);
///initializing the fliiper
c=(ViewFlipper)findViewById(R.id.viewFlipper1);
c.setAutoStart(true);
c.setFlipInterval(500);
c.startFlipping();
}
答案 0 :(得分:2)
在初始化之前添加视图。
当你调用c.addView(demoview,0)时; c为null,因为它尚未初始化。 所以用ViewFlipper初始化c并在之后添加视图。
答案 1 :(得分:2)
在使用findViewById
设置Activity
的视图之前,您无法使用setContentView
。
虽然Booyakka的答案部分正确,但您没有使用包含ViewFlipper
且resId R.id.viewFlipper1
的任何内容设置内容视图。
结果,行......
c=(ViewFlipper)findViewById(R.id.viewFlipper1);
即使你已经将它初始化为Booyakka的建议,也会将c设置为null。
为什么不使用setContentView(...)
布局xml?您尝试使用resId R.id.viewFlipper1
查找视图的事实表明您已创建了布局xml,但您没有对其进行充气,这是问题原因的一部分。
编辑:对布局进行膨胀会获取XML布局文件的内容并实例化其描述的对象。在尝试使用setContentView(<layout-resource-id>)
findViewById
执行此操作
尝试使用您创建的布局文件的名称更改以下onCreate()
方法。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Inflate the main.xml file using the following...
setContentView(R.layout.main);
// Move the findViewById(...) call to here...
c=(ViewFlipper)findViewById(R.id.viewFlipper1);
demoview = new DemoView(this);
finalview = new FinalView(this);
c.addView(demoview,0);
c.addView(finalview, 1);
c.setAutoStart(true);
c.setFlipInterval(500);
c.startFlipping();
}