FindViewByID - 空指针异常! [ANDROID STUDIO]

时间:2015-01-13 20:59:43

标签: java android 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! SO:

final LayoutInflanter lf = getLayoutInflanter(); View view2 = lf.inflate(R.layout.YOURLAYOUTNAME, null); Button kreiscalc = (Button) view2.findViewById(R.id.calc_kreis);

2 个答案:

答案 0 :(得分:1)

到目前为止,我理解“当前”视图中不存在标识为calc_kreis的按钮,这就是findViewById返回null的原因。

方法findViewById只会返回您在setContentView上设置的视图所包含的小部件。如果按钮放在其他视图上,则代码将永远无法运行。

答案 1 :(得分:-1)

是的findViewById只在活动视图中查找视图。