1. MainApp.java
public class MainApp extends Activity { public int displayWidth; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //화면의 크기를 알기위한 display 객체 생성 mdisplay = ((WindowManager)getSystemService(WINDOW_SERVICE)).getDefaultDisplay(); displayWidth = mdisplay.getWidth(); Log.i("Location", "** ** MainApp ** : " + displayWidth); } }
2. ViewApp.java
public class ImageView extends View { private MainApp mMainApp = null; public ImageViewRotate(Context context, AttributeSet attrs) { super(context, attrs); mMainApp = new MainApp(); protected void onDraw(Canvas canvas) { Log.i("Location", "** ** onDraw ** : " + mMainApp.displayWidth); } }
Class MainApp 의 화면 사이즈 displayWidth값을 Class ViewApp에서 사용하고 싶어서 위와 같이 구현하였는데 MainApp에서는 320이 나오는데 ViewApp에서는 0이 나옵니다.
mMainApp = new MainApp(); 선언이 잘못 되었나요?
원인을 모르겠는데 고수님들 부탁드립니다.
그냥가자/ 님 말씀에 저도 동의하는데요 new MainApp()라고 생성자를 호출해도 onCreate()는 호출되지 않습니다. 따라서 displayWidth는 멤버 필드로 초기값을 0으로 갖게되니 0이 출력되는것은 어찌보면 당연한 결과로 보입니다.
죄송합니다.
제가 초보라서... 위에 소스에서 사용방법을한번 보여주셨으면 좋겠습니다.
어떻게 하면 다른 파일의 소스값을 얻어오는지 알고 싶습니다.
View를 상속한 ImageView가 어느시점에서 인스턴스화 되는지는 잘모르겠지만 반드시 View에서 불러와야 된다고 하면, 방법은 여러가지가 있겠지만 먼저 구조적으로 좋지 않은 방법이지만 간단하게 구현이 될것같습니다.(View의 생성시점에 따라 달라질수 있습니다) public int displayWidth를 public static int displayWidth로 하고 View에서 new로 사용하지않고 int width=MainApp.displayWidth; 하면 될것같은데요. 다른 방법으로는 View에서 끄내오는게 아닌 MainApp에서 넘겨주는 방식으로 사용하는 경우도 있을것 같습니다. 저도 초보라
new MainApp 하면 당연히 새로운 MainApp이 만들어질거고...
크기를 얻고자 하는 것은 새로운 MainApp이 아닌 이미 존재하는 MainApp의 크기겠죠?
크기를 얻고 싶다면 MainApp의 참조를 setter를 이용해서 받아서 처리 해야 크기를 받을 수 있을걸로 봅니다.
그리고 mMainApp = new MainApp(); 이런식으로 Activity를 만든다고 해서 Activity의 생명주기가 시작되는게 아닌걸로 알고 있습니다.