setOnSeekBarChangeListener NullPointerException android

时间:2011-11-06 23:44:37

标签: android nullpointerexception seekbar

class PlayAreaView extends View{  
    private static final String DEBUG_TAG = "PlayAreaView";
    private SeekBar sizeSlider;
    private int xMin = 0;
    private int xMax;
    private int yMin = 0;
    private int yMax;

    private Rect rect;
    private GestureDetector gestures;
    private Paint p = new Paint();
    private int side = 50;

    public PlayAreaView(Context context){
        super(context);
        rect = new Rect(0,0,side,side);
        p.setARGB(255, 255, 255, 255);
        GestureListener listener = new GestureListener(this);
        gestures = new GestureDetector(listener);
        sizeSlider = (SeekBar) findViewById(R.id.seek);
        //sizeSlider.setOnSeekBarChangeListener(listener);
    }

我是Android新手,我很难搞清楚这里有什么问题。我在注释掉的行中得到一个NullPointerException。我相信这是因为我要求在一个不是主要活动的类中查找ViewById。如果这确实是问题,我该如何从这个类中访问UI元素。

1 个答案:

答案 0 :(得分:1)

正如您设置的那样,findViewById(R.id.seek)将在PlayAreaView 中搜索ID等于R.id.seek 的子视图,因为您似乎没有主要布局中的SeekBar。

如果您必须从此视图中访问SeekBar,请在实例化时传入对它的引用,例如,在主要活动中

SeekBar sizeSlider = (SeekBar)findViewById(R.id.seek);
PlayAreaView areaView = new PlayAreaView(this, sizeSlider);

并在PlayAreaView中,

SeekBar sizeSlider;

public PlayAreaView(Context context, SeekBar seekBar) {
  super(context);
  sizeSlider = seekBar;
  ...
  seekBar.setOnSeekBarChangeListener(...);
}

然后,可以通过PlaAreaView中的实例变量sizeSlider访问SeekBar实例。