问题:在写一个自定义的Dialog的样式,里面有几个TextView,想把字符串的值传进TextView里。
结果出现NPE:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference.
第一反应应该是我把值传入了空的对象。
检查了下Dialog的onCreate(),发现已经建立了对象,还在写了设置的函数。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.statistic_view);
setCanceledOnTouchOutside(true);
landNum=findViewById(R.id.landNum);
totalArea=findViewById(R.id.totalArea);
end=findViewById(R.id.end);
end.setOnClickListener(this);
}
//设置字符串的函数
public void setTotalArea(String s) {
totalArea.setText(s);
}
public void setLandNum(String s){
landNum.setText(s);
}
当然,作为一枚Android萌新,不知道这样传不进TextView的。(っ•̀ω•́)っ
经过多方查找,发现解决方法:
需要把控件的操作类函数写在onCreate中,然后全局变量传值进去。
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.chart_view);
setCanceledOnTouchOutside(true);
landNum=findViewById(R.id.landNum);
totalArea=findViewById(R.id.totalArea);
end=findViewById(R.id.end);
end.setOnClickListener(this);
// setText()的方法写在这,传入这个类的全局变量
totalArea.setText(totalAreaS);
landNum.setText(landNumS);
}
//全局变量传值
public void setTotalArea(String s) {
totalAreaS=s;
}
public void setLandNum(String s){
landNumS=s;
}
猜想一下,应该是创建Dialog的View的时候,如果出现了View,应该就无法改TextView 的东西了,也就是出现之前就要把它们设置好,不然创建出来View后再调用setText就会出错。