찾다

 >  Q&A  >  본문

android - 为什么用new方法构造的Activity对象,其中的View成员变量是为空的?

正如标题所言,View成员变量已经在Activity的onCreate方法中,通过findViewById方法初始化了。但在另一个类中,用通过new方法构造的Activity对象来执行封装好的公有方法时,发现其中的View成员变量是空的。具体代码如下(new MainActivity().select(selectCity)这句调用Activity的方法):

错误类型是

错误提示是指向下面这句

然后,调试结果如下

发现这里的View对象是为空的。然后,我换成发送广播的方式,让MainActivity接收广播,这样是可以的,调试结果如下:

发现mCityTextView不是空的。

对比上面的情况,我觉得通过findViewById方法初始化的View对象,只属于Activity这个类本身,所以由它使用是没问题的。但是通过new方法构造的Activity对象,得到的是没有初始化的View对象。所以究竟是怎么回事呢???

巴扎黑巴扎黑2771일 전585

모든 응답(7)나는 대답할 것이다

  • 怪我咯

    怪我咯2017-04-17 17:26:36

    길이 좀 험해요. new MainActivity()는 Activity 수명 주기를 따르지 않습니다. 예를 들어 onCreate()에서 컨트롤을 초기화하는 경우 select()를 직접 호출하면 당연히 null 포인터가 됩니다.

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:26:36

    Activity, Service 및 ContentProvider는 새 메서드에서 인스턴스를 얻을 수 없습니다("비정상적인 인스턴스"가 더 적절함). Activity, Service, BroadcastReceiver 및 ContentProvider는 모두 수명 주기를 가지므로 구성 요소에서 사용하지 않는 것이 좋습니다. 외부 호출에 의해 정의된 정적 변수 또는 메서드.

    회신하다
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 17:26:36

    Activity가 Android의 Activity 구성 요소라고 말씀하셨는지 모르겠습니다. Activity 구성 요소를 구성할 때 연결 메서드를 실행하고 Context, Window 등과 같은 개체를 전달해야 하는 이유가 무엇인지 추측합니다. 비어 있는 것은 첨부된 Window 객체가 없기 때문입니다.
    Window 객체는 모든 뷰의 컨테이너입니다

    회신하다
    0
  • PHPz

    PHPz2017-04-17 17:26:36

    이건 당신이 원하는 활동이 아닙니다.
    활동에 대한 참고자료를 전달해주세요.

    회신하다
    0
  • 巴扎黑

    巴扎黑2017-04-17 17:26:36

    코드를 보면 이미 getActivity()를 작성했습니다. 획득한 Activity를 MainActivity로 변환하면 됩니다.
    Activity를 직접 생성하는 라이프사이클 방법은 없습니다

    회신하다
    0
  • 阿神

    阿神2017-04-17 17:26:36

    여기서 문제는 변수에 static이 설정되지 않았기 때문에 새 개체가 나오면 변수가 비어 있어 다시 초기화해야 한다는 것입니다. 아, 기초지식을 통과하지 못했어요. . 하지만 여전히 귀하의 답변에 감사드립니다! !

    회신하다
    0
  • 黄舟

    黄舟2017-04-17 17:26:36

    이 경우에는 인터페이스 콜백을 사용하는 것이 더 간단하지 않을까요?

    회신하다
    0
  • 취소회신하다