为什么这个程序意外停止?

时间:2012-03-18 21:54:32

标签: android

为什么这段代码不起作用?我已经坚持了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();

        }

2 个答案:

答案 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();
}