안드로이드 개발 질문/답변
(글 수 45,052)
어제에 이어서 다시 질문드립니다.
ActivityGroup을 상속해서 TabActivity와 비슷한 것을 구현하려고 애쓰고 있습니다.
위와 같은 방법으로 일단 Tab의 흉내는 내고 있는데, 안드로이드에서 제공하는 TabActivity의 경우에 탭을 이동할 때 실제로 Activity가 foreground와 background로 이동하고 그럴 때마다 onResume() 호출되는 것을 볼 수 있는데 비해서, 위와 같은 구현에서는 Frame2 Activity만 currentActivity가 되고 이것이 변하지 않는 것 같습니다.
embedded된 Activity들의 생명주기를 제어하는 방법에 대해서 알 수 있는 자료를 알려주시면 무척 감사하겠습니다.
저는 원래 시스템 룩&필을 그대로 따라가는 걸 좋아하는데 안드로이드로 무리하게 아이폰 UI를 흉내내려는 작업이 마음에 들지는 않네요.
ActivityGroup을 상속해서 TabActivity와 비슷한 것을 구현하려고 애쓰고 있습니다.
package com.shiftone.activitygrouptest;
import java.util.ArrayList;
import android.app.ActivityGroup;
import android.app.LocalActivityManager;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.FrameLayout;
public class ActivityGroupTest extends ActivityGroup {
/** Called when the activity is first created. */
LocalActivityManager mLocalActivityManager;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = new Intent();
Window w1, w2;
final View v1;
final View v2;
FrameLayout fl = (FrameLayout) findViewById(R.id.FrameLayout01);
mLocalActivityManager = getLocalActivityManager();
intent.setClass(this, FrameActivity1.class);
w1 = mLocalActivityManager.startActivity("Frame1", intent);
intent.setClass(this, FrameActivity2.class);
w2 = mLocalActivityManager.startActivity("Frame2", intent);
v1 = w1.getDecorView();
v2 = w2.getDecorView();
fl.addView(v1);
fl.addView(v2);
v2.setVisibility(View.GONE);
final Button b1;
b1 = (Button) findViewById(R.id.Button01);
b1.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
v1.setVisibility(View.VISIBLE);
v2.setVisibility(View.GONE);
v1.requestFocus(View.FOCUS_FORWARD);
b1.setText(mLocalActivityManager.getCurrentId());
}
});
final Button b2;
b2 = (Button) findViewById(R.id.Button02);
b2.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
v1.setVisibility(View.GONE);
v2.setVisibility(View.VISIBLE);
v2.requestFocus(View.FOCUS_FORWARD);
mLocalActivityManager.destroyActivity("Frame1", true);
}
});
}
}위와 같은 방법으로 일단 Tab의 흉내는 내고 있는데, 안드로이드에서 제공하는 TabActivity의 경우에 탭을 이동할 때 실제로 Activity가 foreground와 background로 이동하고 그럴 때마다 onResume() 호출되는 것을 볼 수 있는데 비해서, 위와 같은 구현에서는 Frame2 Activity만 currentActivity가 되고 이것이 변하지 않는 것 같습니다.
embedded된 Activity들의 생명주기를 제어하는 방법에 대해서 알 수 있는 자료를 알려주시면 무척 감사하겠습니다.
저는 원래 시스템 룩&필을 그대로 따라가는 걸 좋아하는데 안드로이드로 무리하게 아이폰 UI를 흉내내려는 작업이 마음에 들지는 않네요.




해결 못하신 분들을 위한 늦은 Tip.
: ActivityGroup 에서 setContentView 를 할 때 강제로 초기화 메소드를 호출할 수 있습니다.
초기화 하고자하는 액티비티 : MyActivity.java 라고 가정합니다.
MyActivity.java 안에 public 속으로 init()함수를 선언하고 초기화에 필요한 기능들을 모아둡니다.
그리고 ActivityGroup 에서 setContentView 를 할 때 다음 명령을 실행합니다.
LocalActivityManager lam = getLocalActivityManager(); // 아마 액티비티그룹을 생성할 때 선언할겁니다. 그러면 패스
((MyActivity)lam.lam.getActivity("차일드 1")).init();
이상입니다.