setOnSeekBarChangeListener NullPointerException android - PullRequest
0 голосов
/ 07 ноября 2011
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 в классе, который не является основным видом деятельности. Если это действительно проблема, как я могу получить доступ к элементам пользовательского интерфейса из этого класса.

1 Ответ

1 голос
/ 07 ноября 2011

Как вы настроили, findViewById (R.id.seek) будет искать подпредставление с идентификатором, равным R.id.seek в PlayAreaView , которого не существует, поскольку у вас, кажется, есть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(...);
}

, тогда к экземпляру SeekBar можно получить доступ через переменную экземпляра sizeSlider из PlaAreaView.

...