FindViewByID - 空指针异常! [ANDROID工作室]
FindViewByID - Null Pointer Exception! [ANDROID STUDIO]
我是 Android Studio 的新手,所以有很多事情需要帮助。
其中之一就是烦人 findViewById()
。
这是我最重要的部分 MainActivity.java
public class MainActivity extends ActionBarActivity {
public Button kreisd;
public Button kugeld;
public Button kreiscalc;
public Context con;
public EditText radius_eingabe;
public TextView kreis_ergebnis_vol;
public TextView kreis_ergebnis_G;
public String str1;
public double st1;
public double G_kreis;
public static final double PI = 3.141592653589793d;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
kreisd = (Button)findViewById(R.id.kreis);
kugeld = (Button)findViewById(R.id.kugel);
kreiscalc = (Button)findViewById(R.id.calc_kreis);
kreisd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
con = MainActivity.this;
setContentView(R.layout.kreislay);
}
});
kreiscalc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
con = MainActivity.this;
str1 = radius_eingabe.toString();
st1 = Double.parseDouble(str1);
G_kreis = PI*st1*st1;
kreis_ergebnis_G = (TextView)findViewById(R.id.G_kreis);
kreis_ergebnis_G.setText("" + G_kreis);
}
});
}`
它总是给我那个错误:(又是最重要的部分)
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
我知道,很多人认为 kreiscalc
,(导致错误的按钮)不存在!
但确实如此。我有两种不同的布局:一种是所有其他内容,另一种是 kreiscalc
。那么,这个 findViewById()
- 方法是否只能找到位于第一个(和主要)布局中的 ID?我需要帮助。感谢您的关注!
编辑:知道了!只需使用 LayoutInflanter!所以:
final LayoutInflanter lf = getLayoutInflanter();
View view2 = lf.inflate(R.layout.YOURLAYOUTNAME, null);
Button kreiscalc = (Button) view2.findViewById(R.id.calc_kreis);
到目前为止,我了解到 "current" 视图中不存在 ID 为 calc_kreis
的按钮,这就是 findViewById
return 为空的原因。
方法 findViewById
只会 return 您在 setContentView
上设置的视图所包含的小部件。如果按钮放在其他视图上,您的代码将永远无法工作。
是的 findViewById 仅在活动视图中查找视图。
我是 Android Studio 的新手,所以有很多事情需要帮助。
其中之一就是烦人 findViewById()
。
这是我最重要的部分 MainActivity.java
public class MainActivity extends ActionBarActivity {
public Button kreisd;
public Button kugeld;
public Button kreiscalc;
public Context con;
public EditText radius_eingabe;
public TextView kreis_ergebnis_vol;
public TextView kreis_ergebnis_G;
public String str1;
public double st1;
public double G_kreis;
public static final double PI = 3.141592653589793d;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
kreisd = (Button)findViewById(R.id.kreis);
kugeld = (Button)findViewById(R.id.kugel);
kreiscalc = (Button)findViewById(R.id.calc_kreis);
kreisd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
con = MainActivity.this;
setContentView(R.layout.kreislay);
}
});
kreiscalc.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
con = MainActivity.this;
str1 = radius_eingabe.toString();
st1 = Double.parseDouble(str1);
G_kreis = PI*st1*st1;
kreis_ergebnis_G = (TextView)findViewById(R.id.G_kreis);
kreis_ergebnis_G.setText("" + G_kreis);
}
});
}`
它总是给我那个错误:(又是最重要的部分)
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
我知道,很多人认为 kreiscalc
,(导致错误的按钮)不存在!
但确实如此。我有两种不同的布局:一种是所有其他内容,另一种是 kreiscalc
。那么,这个 findViewById()
- 方法是否只能找到位于第一个(和主要)布局中的 ID?我需要帮助。感谢您的关注!
编辑:知道了!只需使用 LayoutInflanter!所以:
final LayoutInflanter lf = getLayoutInflanter();
View view2 = lf.inflate(R.layout.YOURLAYOUTNAME, null);
Button kreiscalc = (Button) view2.findViewById(R.id.calc_kreis);
到目前为止,我了解到 "current" 视图中不存在 ID 为 calc_kreis
的按钮,这就是 findViewById
return 为空的原因。
方法 findViewById
只会 return 您在 setContentView
上设置的视图所包含的小部件。如果按钮放在其他视图上,您的代码将永远无法工作。
是的 findViewById 仅在活动视图中查找视图。