2011-04-22 2 views
0

은 너무 간단 할 수도 있지만 올바른 방법을 찾지 못했습니다.initWithParameter와 같은 매개 변수를 사용하여 Java onCreate를 작성하십시오. C++

C++에서는 initWithParameter: xxx을 작성하여 클래스를 인스턴스화 한 다음 init에 init 시간에 값이 제공된 인스턴스 변수를 설정합니다.

자바에서는 어떻게해야할지 모르겠다. 현재 내가 다음을 수행하십시오

public class SpecialScreen extends BASEScreen{ 
private static final int ACTIVITY_1 = 1; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); //create the instance 
    defineScreenType (ACTIVITY_1); //second call to set the instance variable 
    presentOnScreen(); 
} 

동안을 BASEScreen에 : 이것은 그 일을하는 가장 좋은 방법이 될 수 없습니다

public class BASEScreen extends Activity { 
private Integer activityCode; // which activity should I do? 

@Override 
public void onCreate(Bundle savedInstanceState) { // the creation 
    super.onCreate(savedInstanceState); 
} 

// the setting of the instance variable 
public void defineScreenType(int screenID) { 
    activityCode = screenID; 

} 

. 더 나은 방법?

감사 BASEScreen 내 SpecialScreen의 호출을 표시하기 위해 추가

는 :

@Override 
public boolean onMenuItemSelected(int featureId, MenuItem item) { 
    Intent i; 
    switch (item.getItemId()) { 
    case OTHER_PAGE_ID: 
     // 
     if (activityCode == ACTIVITY_1) { 
      i = new Intent(this, SpecialScreen2.class); 
      i.putExtra("Task", ACTIVITY_2); 
      startActivityForResult(i, ACTIVITY_2); 
      finish(); 

     } else { 
      i = new Intent(this, SpecialScreen1.class); 
      i.putExtra("Task", ACTIVITY_1); 
      startActivityForResult(i, ACTIVITY_1); 
      finish(); 
     } 

     return true; 

추신 : 내가 추가 퍼팅 더 이상 필요하지 않은 것을 알고있다. 이것은 두 개의 SpecialScreen 서브 클래스가 있고 항상이 매개 변수로 BASEScreen을 호출하기 전에 제가 한 방식입니다.

+1

안드로이드 질문으로 태그가 붙은 것처럼 보입니다. –

+0

@ user387184 : 무엇을하려고합니까? '사용자가 버튼 1을 누르고, 활동 1을 시작하고, 사용자가 버튼 2를 누르고, 활동 2를 시작합니다'와 같은 것입니까? 사용자 선택이나 다른 조건에 따라 다른 활동을 시작 하시겠습니까? – Squonk

+0

예 맞습니다 – user387184

답변

2

정확함, C++와 같은 "기본"구문은 없습니다. 생성자에서이 작업을 수행해야합니다. 당신을 마음, 당신은 당신이 오히려 개인보다 보호 activityCode을 만들 수, setter 메소드를 사용할 필요가 없습니다, 그냥 수행

다른 옵션 세트를 사용하여 객체를 생성하기 위해 빌더 패턴을 사용
activityCode = ACTIVITY_1; 

오브젝트를 빌드 할 때 (필요할 때) 겹쳐 쓰는 빌더 내부의 디폴트 값. 아래의 의견에 응답

편집 : 나는 약간의 혼동을 드려 죄송합니다

그렇지 않은 경우에 나는 "생성자"를 부르고있다. BASEScreen 당신이 private

public class BASEScreen extends Activity { 
    protected Integer activityCode; 

에서 protected에 대한 액세스를 변경하는 경우

그런 다음 SpecialScreen 하위 클래스에서 그 액세스 할 수 있습니다

내가 제대로 질문을 이해 해요 경우
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    activityCode = 1; // Or ACTIVITY_1 if you'd like 
    presentOnScreen(); 
} 
+0

죄송합니다, 또한 여기에 완전히 이해가 잘 모르겠습니다. activityCode는 어디에 설정합니까? 바로 BASEScreen 안에 넣어야합니까? 그래서 나는 John Munsch가 위에 쓴 것처럼 어떻게 든 그것을 전달해야합니까? 설명해주세요 ... Thanks – user387184

+0

죄송합니다, 위의 편집을 참조하십시오. 나는 생성자를 직접 호출하지 않기 때문에 예제 코드에 충분한주의를 기울이지 않았다. –

+0

오 오케이, 알 겠어, 이거 할거야 - 고마워! – user387184

2

. Java의 모든 클래스에는 하나 이상의 생성자가있을 수 있습니다. 각각은 매개 변수가 없거나 전달할 매개 변수 집합을 가질 수 있습니다 (컴파일러는 어느 집합을 사용할지 결정할 수 있도록 각각 고유 한 집합/순서를 가져야 함).

public class SpecialScreen extends BASEScreen { 
    private static final int ACTIVITY_1 = 1; 

    // There is a default constructor with no parameters provided for you 
    // by default if you don't define any constructors. 
    public SpecialScreen() { 
     // I'm overriding the default constructor and this one will do 
     // something else. 
     super(ACTIVITY_1); 
    } 

    // But you can also have ones like this. 
    public SpecialScreen(int activity) { 
     super(activity); 
    } 
} 

수행 할 때마다 호출되어 새로운 예를 들면 다음과 같습니다

BASEScreen의 고슴도치 = 새로운 SpecialScreen(); // 매개 변수 생성자가 없습니다.

또는

BASEScreen의 호저 = 새로운 SpecialScreen (5); // 매개 변수를받는 생성자.

+0

죄송합니다. 정말로받지 못합니다. 생성 된 객체에 대한 activityCode 변수는 어디에 설정되어 있습니까? 생성 된 객체는 실제로 어떤 종류의 화면인지 알아야합니다. 여기서 내가 무엇을 놓치고 있습니까? – user387184

관련 문제