我在一个单独的类中定义了一个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。我做错了什么?
答案 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。