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元素。
答案 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实例。