findViewById在通过对象调用时抛出null

时间:2014-07-30 16:04:18

标签: java android

我在main.java中有一个函数,它使用一些UI元素,如spinner到textview。

public void updateNearByPeople() {
        reportEventPeopleAroundSpinner = (Spinner) findViewById(R.id.peopleAround);
        …
}

当我从类中调用此函数时,它工作正常。

但是当我从另一个class2.java通过object findViewById投掷java.lang.NullPointerException

来调用此函数时

如果我使用static中的函数及其中的所有变量,它在从class2.java调用时也能正常工作,但它不适用于对象调用。

我如何解决这个问题并使对象意识到上下文?

main.java

protected void onCreate(final Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_view);

    mainAppContext = this;
    Main mainObj=new Main();
    gMapObj.initiateMap(mainAppContext,mainObj, mapFrag);
}

class2.java

public boolean initiateMap(Context appContext, Main mainObj, MapFragment mapFrag) {
        mainAppContext = appContext;
        mainAppObject = mainObj;
        …
        mainAppObject.updateNearByPeople();
    }

1 个答案:

答案 0 :(得分:2)

Main mainObj=new Main();
你不能那样做。活动需要经历其生命周期,以构建其视图层次结构。如果只是通过new运算符实例化它,则不会调用它的onAttach或onCreate方法。这意味着您也无法访问资源和视图