2012-02-23 2 views
-1

저는 모든 활동 및 활동 그룹에서 사용할 수있는 코드 세트가있는 애플리케이션을 작성하고 있습니다. 그러나,이를 달성하기 위해, 나는 나의 활동을 확장했다 :활동 및 활동 그룹 확장

//custom Activity 
public abstract class BaseActivity extends Activity 
//custom ActivityGroup 
public abstract class BaseActivityGroup extends ActivityGroup 

//implemented activities in my app 
public class PickUser extends BaseActivity 
//and 
public class Home extends BaseActivityGroup 

지금은 일이, 내가 BaseActivity에서 작성하는 사용자 지정 코드, 나는 (현재의 구현으로) 너무 BaseActivityGroup에서 동일한를 작성해야 뭐든간에. 이것은 코드 동기화 문제가 발생하기 쉽고 좋은 기술은 아닙니다. 그래서

, 내가 어떻게 난 단지 BaseActivity에서 사용자 정의 코드를 작성하는 방법으로 내 확장을 내 BaseActivityGroupActivityGroup 확장 할 수 있습니다 - BaseActivity 클래스에서 생각된다?

나는 안드로이드가이 작업을 수행하는 방법을 관찰, 그래서 안드로이드에서 ActivityGroup활동 클래스를 확장하는 경우

. 그리고 나는 또한 실제로 (확장 활동입니다) BaseActivity를 확장 (BaseActivityGroup 라고도 함) 내 사용자 지정 ActivityGroup 클래스를 작성합니다.

아이디어가 있습니까?

답변

0

최초의 활동의 아이가 나쁜이며, 사용하지 않아야로

+0

도 액티비티 메소드에 대한 액세스가 필요합니다. ActivityDelegate 클래스를 유지하십시오. 안 그래? – waqaslam

+0

액티비티가 델리게이트에 참조로 저장되도록 예제를 편집했습니다. 그런 다음 필요한 모든 공통 Activity 메소드에 콜백 할 수 있습니다. –

+0

그렇다면 활동 라이프 사이클을 처리하는 방법은 무엇입니까? 당신의 구현에'super.onCreate (savedInstanceState);가 없습니다. 이 문제를 해결하는 방법? – waqaslam

0

기본이라는 추가 최종 클래스를 추가하십시오. 단지 방법이 포함됩니다 이 하나 그러한 예를 들어 같은 다른 기본 클래스에 의해 호출되는 :

public static boolean createOptionsMenu(final Menu menu, 
     final MenuInflater inflater) { 
    inflater.inflate(R.menu.main_menu, menu); 
    return true; 
} 

그런 다음 BaseActivity 및 BaseActivityGroup 클래스에서, 당신이 부를 것이다 :

@Override 
public final boolean onCreateOptionsMenu(final Menu menu) { 
    return Base.createOptionsMenu(menu, getMenuInflater()); 
} 

그것을 희망 도와 줘요! 모든 것이 ACTIVITYGROUPS의 안드로이드

+0

실제로 정적 메서드가 필요하지 않습니다.** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** ** 모든 것을 확장한다면 클래스 파일 – waqaslam

0

그냥 BaseGroupActivity 포함 BaseActivity에 이르기까지 확장 할 수 있습니다. 이들은 더 이상 사용되지 않으며 여러 조각으로 된 단일 활동을 사용하는 것이 좋습니다.

액티비티 그룹을 사용해야하는 경우에는 위임 패턴을 구현하는 것이 가장 좋습니다.

onCreate, onResume과 같은 모든 일반적인 메서드를 처리하고 그 기본에서 사용하는 대리자를 만듭니다. 이 예제에서는 위임에 액티비티에 대한 참조를 저장합니다. 이 순환 참조는 기호가 아닐 수도 있습니다. 대안은 대리인의 메서드에 액티비티를 전달하는 것입니다.

public class ActivityDelegate() { 
    private Activity mActivity; 

    public ActivityDelegate(final Activity activity) { 
     mActivity = activity; 
    } 
    public void onCreate(final Bundle savedInstanceState) { 
     // Do stuff. 
    } 
} 


public abstract class BaseActivity extends Activity { 
    private ActivityDelegate mDelegate = new ActivityDelegate(this); 

    public void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mDelegate.onCreate(savedInstanceState); 
    } 
    ... 
} 

public abstract class BaseActivityGroup extends ActivityGroup { 
    private ActivityDelegate mDelegate = new ActivityDelegate(this); 

    public void onCreate(final Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     mDelegate.onCreate(savedInstanceState); 
    } 
    ... 
} 
+0

에서 사용 가능하도록 필수적인 기본 클래스에서 ** ** ** ** ** ** ** ** ** ** ** ** ** ** BaseActivity **에 다음 모든 클래스는 ** Activity **의 인스턴스가 될 것이고 이것은 ** ActivityGroup ** 이후로 내가 원하는 경우가 아닙니다. 그러나 – waqaslam

0

당신은 방법으로 귀하의 로그인을 별도의 파일에 넣을 수 있습니다. 파일에서 활동 인스턴스가 필요한 경우 BaseActivityBaseActivityGroup에서 동일한 메소드를 호출하십시오. 생성자를 통해 컨텍스트를 전달하십시오.