Java Android:跨类启动侦听器
嘿,我目前正在安卓系统上自定义视图,但我现在在设置侦听器时遇到了一个问题。如果我从自定义视图类中调用侦听器,一切都正常,但是我想从MainActivity设置侦听器,这正是我现在遇到问题的地方。每次,我从MainActivity调用侦听器时,我都会得到一个空指针,不管我传递给该方法的是什么。这里是自定义类的代码Java Android:跨类启动侦听器,java,android,Java,Android,嘿,我目前正在安卓系统上自定义视图,但我现在在设置侦听器时遇到了一个问题。如果我从自定义视图类中调用侦听器,一切都正常,但是我想从MainActivity设置侦听器,这正是我现在遇到问题的地方。每次,我从MainActivity调用侦听器时,我都会得到一个空指针,不管我传递给该方法的是什么。这里是自定义类的代码 public class RoundKnobButton extends RelativeLayout implements OnGestureListener { public in
public class RoundKnobButton extends RelativeLayout implements OnGestureListener {
public interface RoundKnobButtonListener {
public void onStateChange(boolean newstate) ;
public void onRotate(int percentage);
}
public RoundKnobButtonListener m_listener;
public void SetListener(RoundKnobButtonListener l) {
m_listener = l;
}
如果我从这个类中调用侦听器
SetListener(new RoundKnobButtonListener() {
public void onStateChange(boolean newstate) {
}
public void onRotate(final int percentage) {
System.out.println(percentage);
}
});
它完美地返回值。现在,当我想做像
rv=(RoundKnobButton) findViewById(R.id.jogView);
rv.SetListener(new RoundKnobButton.RoundKnobButtonListener() {
public void onStateChange(boolean newstate) {
}
public void onRotate(final int percentage) {
System.out.println(percentage);
}
});
在我的主要活动中,我得到
02-10 14:31:45.354: W/dalvikvm(19006): threadid=1: thread exiting with uncaught exception (group=0x418259a8)
02-10 14:31:45.360: E/AndroidRuntime(19006): FATAL EXCEPTION: main
02-10 14:31:45.360: E/AndroidRuntime(19006): java.lang.NullPointerException
02-10 14:31:45.360: E/AndroidRuntime(19006): at .buildUI( .java:191)
02-10 14:31:45.360: E/AndroidRuntime(19006): at .access$6( .java:125)
02-10 14:31:45.360: E/AndroidRuntime(19006): at .onPostExecute( .java:334)
其中第191行指的是rv.SetListener(新的RoundKnobButton.RoundKnobButtonListener()
我已经尝试过通过各种类型的强制转换传递各种参数,但在这里似乎没有任何帮助
提前谢谢,Alex谢谢KevDev,我发现了问题。我打了电话
super(context);
但是我应该在构造函数中调用super(context,attrs);
,因为它是public RoundKnobButton(context-context,AttributeSet-attrs)
,否则它当然不能返回ID
谢谢您是否检查过rv不为空,并且在您的xml布局文件中已使用此id R.id.jogView设置?您是对的,它实际上为空,但现在我想知道为什么它没有得到任何值,因为findViewById是所有其他(按钮等)都可以工作的。还有什么需要考虑的吗?