2015-01-26 2 views
2

현재 두 개의 하위 클래스가있는 부모 클래스가 있고 본질적으로 둘 다 공유 변수 (float)를 상속 받도록하고 싶습니다. subclass1에서 float 값을 설정 한 다음 subclass2에서 float 값을 사용해야합니다. 나는 이것들이 모든 안드로이드 액티비티이고 subclass1은 액티비티 체인의 시작에 있고 subclass2는이 체인의 끝에 있으며, 그 사이의 모든 액티비티는 같은 부모 클래스의 자식들이라는 것을 덧붙여 야합니다.자바의 서브 클래스 내 공유 변수

내가 현재 가지고하는 것은 비슷한는 다음 가치를 떠

class activityParent extends Activity{ 
    public static float value; 

    public void setValue(){ 

     //grab the value from phone (ill leave this code out and will hardcode a value below as an example) 
     value = 0.6f; 
    } 

    public void useValue(){ 
     //where i use the value in another function here 
     otherFuncion(value); 
    } 

} 

class subclass1 extends activityParent 
{ 
    @Override 
    public void onCreate(Bundle bundle){ 
     setValue();//need this to be initialized first 
     super.onCreate(bundle); 

    } 
} 

class subclass2 extends activityParent{ 
    //some previous code here 
    //i need to use the value just before the activity finishes 
    useValue(); 
    finish(); 

} 

다른 곳에서는 사용되지 않습니다 (이 그냥 맨손으로 뼈 체크 아웃 내가 다른 코드를 많이 떠 났어요) .

이 접근법은 잘못된 것처럼 보입니다.하지만이 방법을 잘 알고 있지만 올바르게 구현하는 방법을 모르겠습니다.

데이터를 의도와 함께 전달하려고 생각했지만 두 하위 클래스가 서로 직접 접촉하지 않았기 때문에 이들 사이의 일련의 활동을 통해 이러한 데이터를 문자열로 연결하지 않아도됩니다. 끝.

+0

아마도 이것은 좋은 습관은 아니지만 파일에 값을 쓰고 다른 활동에서 읽을 수는 있습니다. – iWumbo

+0

나는 접근법의 문제점을 보지 못했다. 정적 변수가 있으며 어떤 활동으로도 넘어 가지 않고 언제 어디서나 액세스 할 수 있습니다. 아니면 당신의 질문이 충분히 명확하지 않을 수도 있습니다! –

+2

@NguyenDoanTung과 동의하십시오. 정적 필드를 사용하는 것이 좋지 않다고 생각하면 싱글 톤 데이터 컨테이너 클래스를 사용하거나 값을 저장하고 가져 오기 위해 SharedPreferences (Android에서 가장 간단한 영구 저장 장치)를 사용하는 것이 좋습니다. –

답변

0

아래 링크에서 자주 묻는 질문이 있습니다. 이상적으로

How do I pass data between Activities/Services within a single application?

, 당신이 기본 데이터 형 (float를) 공유하려는 때문에, 의도을 권장합니다. 그러나 이것이 요구 사항에 잘 맞지 않으므로 이것을 건너 뛸 수 있습니다.

다음으로 "정적"(현재 수행 중)을 사용하면 좋습니다. 응용 프로그램의 다른 클래스에서이 정적 필드에 액세스 할 수 있습니다.

하지만 대체를 원할 경우 "싱글 톤"클래스를 사용할 수 있습니다. 이것은 하나의 인스턴스 만 갖도록 설계된 클래스입니다.

public class Singleton { 
    private static Singleton INSTANCE ; 

    private Singleton() {} 

    public static synchronized Singleton getInstance() { 
     if(INSTANCE == null){ 
      INSTANCE = new Singleton(); 
     } 
     return INSTANCE; 

    } 
} 

인스턴스를 반환하는 getInstance()와 같은 이름의 정적 메서드가 있습니다. 이 메서드가 처음 호출되면 전역 인스턴스가 만들어집니다.

예를 들어 activity subclass1은 인스턴스를 검색하고 setValue (0.6)를 호출 할 수 있습니다. 나중의 활동 subclass2는 인스턴스를 검색하고 getValue()를 호출하여 마지막으로 설정된 값을 검색 할 수 있습니다.

+0

당신의 싱글 톤은 멀티 스레딩에서 훌륭하게 재생되지 않습니다. –

0

계단식 캐스케이드에 매우주의하십시오. onCreate()SubClass1이고 super.onCreate()onCreate()이고 ActivityParent입니다. 이로 인해 연쇄 반응이 발생할 수 있습니다 (ActivityParent을 호출하려는 의도는 onCreate()에서 계속 사용할 수 있음).

+0

댓글이어야합니다. –