Android findViewById抛出NullPointerException

时间:2011-12-20 20:10:00

标签: android nullpointerexception viewflipper

我在一个单独的类中定义了一个ViewFlipper。它看起来像这样:

public class Flipper extends Activity {
    public ViewFlipper view_flipper;

    /* Constructor */
    public Flipper(int flipper_id) {
        view_flipper = (ViewFlipper) findViewById(flipper_id);
    }
    ...

然后在另一个Activity的onCreate()方法中,我将像这样实例化Flipper:

private Flipper flipper;
flipper = new Flipper(R.id.login_screen_flipper);

但是,我在Flipper的构造函数中得到NullPointerException。当我调试时,我发现flipper_id有一个有效的id。我做错了什么?

2 个答案:

答案 0 :(得分:3)

您无法创建此类活动。

要创建活动,您必须使用Intents执行此操作。您必须在XML文件中定义布局并使用setContentView(R.layout.layout_name)附加它;

看看这个开始学习:https://developer.android.com/training/index.html


更新:

好的,目前还不清楚你的问题是如何完成的。

如果你正在扩展ViewFlipper的行为,我建议你扩展它:

package your.package;

public class MyFlipper extends ViewFlipper {
    // ...
}

然后在你的xml中使用它:

<your.package.ViewFlipper
    [...] parameters [...] />

最后,当你实现它时,你可以这样做:

public class YourActivity extends Activity {

    public ViewFlipper viewFlipper;

    @Override
    protected void onCreate (Bundle savedInstanceState) {
        viewFlipper = (ViewFlipper) findViewById(R.id.login_screen_flipper);
    }

    // ... more activity stuff
}

PS:在Java成员变量(或Java中的字段)中使用lowerCamelCase表示法是很好的习惯

答案 1 :(得分:1)

当您在另一个活动中实例化Flipper时,将在Flipper的构造函数中调用findViewById。它是Flipper类的一个方法,因为它扩展了Activity,当然它的调用在构造函数中无效,因为你没有设置内容视图,因为它通常在Activity.onCreate中完成。 Flipper不应该扩展Activity,你应该在不是id的构造函数中传递ViewFlipper。