就像标题说的那样,尝试在我的android项目中设置来自Java的文本视图文本时出现错误,我看不到原因.
package com.codeherenow.sicalculator;
import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.SeekBar;
public class SICalculatorActivity extends Activity implements SeekBar.OnSeekBarChangeListener{
public double years;
public TextView YT = (TextView) findViewById(R.id.Years);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sicalculator);
}
@Override
public void onProgressChanged (SeekBar seekBar,int i, boolean b){
years = i;
}
@Override
public void onStartTrackingTouch (SeekBar seekBar){
}
@Override
public void onStopTrackingTouch (SeekBar seekBar){
}
YT.setText(years + " Year(s)");
}
解决方法:
你有几个问题.
首先,您不能在这里这样做
public TextView YT = (TextView) findViewById(R.id.Years);
因为布局尚未膨胀,所以无法通过findViewById()查找视图.您可以在那里声明
public TextView YT;
但是您需要在调用setContentVie()之后对其进行初始化
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sicalculator);
//can't do it before that line ^
YT = (TextView) findViewById(R.id.Years);
}
您正在尝试在方法外部调用setText().将其移动到某种方法.但是您无法在onCreate()中执行此操作,因为Years没有给出值.因此,您可能希望在其他地方使用它.也许在onProgressChanged()中.
另外,要遵循Java命名约定,您应该以小写字母(yt或yT和年)开头来命名变量.