2011-11-06 2 views
0
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); 
    } 

Je suis nouveau sur Android et je n'arrive pas à trouver ce qui ne va pas ici. J'obtiens une exception NullPointerException sur la ligne commentée. Je crois que c'est parce que je demande de trouver ViewById dans une classe qui n'est pas l'activité principale. Si c'est effectivement le problème, comment puis-je accéder aux éléments de l'interface utilisateur de cette classe.setOnSeekBarChangeListener NullPointerException android

Répondre

1

Comme vous l'avez mis en place, findViewById (R.id.seek) recherche un sous-vue avec ID égal à R.id.seek au sein PlayAreaView, qui n'existe pas puisque vous semblez avoir la barre de recherche dans votre disposition principale.

Si vous devez accéder à la barre de recherche à partir de ce point de vue, passer une référence à tout en instancier, par exemple, dans l'activité principale

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

et PlayAreaView,

SeekBar sizeSlider; 

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

puis , l'instance SeekBar est accessible via la variable d'instance sizeSlider de PlaAreaView.