if (compassview != null) {
Alert("正常方法!");
} else  {
try {
         compassview = (CompassView) this.findViewById(R.id.comVie);
compassview.setRoll(roll);

catch (Exception ex) {
               Alert("控件的Null逻辑\npitch=" + pitch + "\nroll=" + roll + "\nheading="+ heading); }
}

解决方案 »

  1.   

    null是因为 你调用的 不在你setContentView()里面的layout
      

  2.   

    现在感觉是在命名空间上出现的问题!这是一个很弱智的问题,新手多多鼓励,少拍砖!
    我在main.xml中定义控件时出现
    <com.paad.compass.CompassView android:id="@+id/comVie" 带包名定义不出错,如果
    <CompassView android:id="@+id/comVie" 这样定义程序就运行不起来。。现在我定义的控件与我活动是在同一个空间中 com.paad.compass.
      

  3.   

    其实我也很想知道是为什么
    从网上的各种Demo来看,自定义view,使用时前面都是要加上包名的
    不过从表面上来看,Android自己定义的view都是在android.widget包下的,所以编译器默认应该会是从这个包下去取而不是你的工程路径(或者是你说的活动空间),所以为了能找到你的自定义的view,前面应该加上包名让编译器知道吧,个人理解啊。
      

  4.   

    自己定制的控件是通过重写形成的。所以你在xml中要指明你自己定制的类,用com.paad.compass.CompassView 。CompassView是个类名。在xml中不认识这个标签,不能编译。