OnSeekBarChangeListener始终在Android中评估为null

时间:2012-02-05 11:53:22

标签: java android listener

我有一个用4个搜索栏制作的android程序,以及每个搜索栏附带的4个textviews。现在,我试图让每个textview的内容等于seekbars的整数进度。这是我的代码,我已经尝试了许多方法来正确实现OnSeekBarChangeListener,但是当sb1-sb4将其OnSeekBarChangeListener设置为OnSeekBarProgress时,LogCat仍然显示它为null。请帮我确定一下我的问题:(

public class TippopotamusActivity extends Activity {
    SeekBar sb1;
    SeekBar sb2;
    SeekBar sb3;
    SeekBar sb4;
    TextView tv1;
    TextView tv2;
    TextView tv3;
    TextView tv4;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    tv1 = (TextView) findViewById(R.id.textView1);
    tv2 = (TextView) findViewById(R.id.textView2);
    tv3 = (TextView) findViewById(R.id.textView3);
    tv4 = (TextView) findViewById(R.id.textView4);

    sb1 = (SeekBar) findViewById(R.id.seekBar1);
    sb2 = (SeekBar) findViewById(R.id.seekBar2);
    sb3 = (SeekBar) findViewById(R.id.seekBar3);
    sb4 = (SeekBar) findViewById(R.id.seekBar4);

    sb1.setOnSeekBarChangeListener(OnSeekBarProgress);
    sb2.setOnSeekBarChangeListener(OnSeekBarProgress);
    sb3.setOnSeekBarChangeListener(OnSeekBarProgress);
    sb4.setOnSeekBarChangeListener(OnSeekBarProgress);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
}

OnSeekBarChangeListener OnSeekBarProgress =
        new OnSeekBarChangeListener() {

        public void onProgressChanged(SeekBar s, int progress, boolean touch){
            if(s.getId() == R.id.seekBar1)
            {
                tv1.setText(progress);
            }
            else if(s.getId() == R.id.seekBar2)
            {
                tv2.setText(progress);
            }
            else if(s.getId() == R.id.seekBar3)
            {
                tv3.setText(progress);
            }
            else
            {
                tv4.setText(progress);
            }
        }

        public void onStartTrackingTouch(SeekBar s){

        }

        public void onStopTrackingTouch(SeekBar s){

        }
        };

1 个答案:

答案 0 :(得分:1)

在初始化变量之前移动setContentView(R.layout.main);。您的onCreate方法应如下所示

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tv1 = (TextView) findViewById(R.id.textView1);
    tv2 = (TextView) findViewById(R.id.textView2);
    tv3 = (TextView) findViewById(R.id.textView3);
    tv4 = (TextView) findViewById(R.id.textView4);

    sb1 = (SeekBar) findViewById(R.id.seekBar1);
    sb2 = (SeekBar) findViewById(R.id.seekBar2);
    sb3 = (SeekBar) findViewById(R.id.seekBar3);
    sb4 = (SeekBar) findViewById(R.id.seekBar4);

    sb1.setOnSeekBarChangeListener(OnSeekBarProgress);
    sb2.setOnSeekBarChangeListener(OnSeekBarProgress);
    sb3.setOnSeekBarChangeListener(OnSeekBarProgress);
    sb4.setOnSeekBarChangeListener(OnSeekBarProgress);
}