我是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?我需要帮助。谢谢你的关注!
final LayoutInflanter lf = getLayoutInflanter();
View view2 = lf.inflate(R.layout.YOURLAYOUTNAME, null);
Button kreiscalc = (Button) view2.findViewById(R.id.calc_kreis);
答案 0 :(得分:1)
到目前为止,我理解“当前”视图中不存在标识为calc_kreis
的按钮,这就是findViewById
返回null的原因。
方法findViewById
只会返回您在setContentView
上设置的视图所包含的小部件。如果按钮放在其他视图上,则代码将永远无法运行。
答案 1 :(得分:-1)
是的findViewById只在活动视图中查找视图。