본문 바로가기
개발/android

Intent 전달 방식을 모방하여 부모 activity를 호출하기

by 매몰 2018. 6. 7.

 

IOS에서는 prepare()을 통해서 부모 controller를 쉽게 전달할 수 있다.

하지만 Android에서는 Intent로 activity를 전달하기 쉽지 않다.

 

뭐, Intent 말고도 여러 전달 방식이 있기 때문에 상관없지만...

깔끔하게 코딩하고 싶은 마음에 함 만들어 보았다.

 

static을 이용하지만, 마치 Intent로 전달하는것 같은 느낌으로ㅎㅎ

 

 

public class BaseActivity extends FragmentActivity {

private static final String KEY_PARAM_CONTEXT_ID = "ParamContextId";

//전달할 Context를 담는 Map
private static HashMap<Long, Context> mParamContextMap = null;

//전달된 Context를 저장할 인스턴스
private Context mParamContext;

//부모 Activity에서 호출되어 Context를 받는다
public static void putParamContext(Intent intent, Context context) {

//Map이 널이면 즉 Context가 하나도 없다면 생성한다
if (mParamContextMap == null)
mParamContextMap = new HashMap<>();

//현재 시간을 식별자로 전달 Intent에 저장한다. 이는 Context가 static에 담아지기 때문에 상속받은 모든 activity에서 만약에 있을 출동을 막기 위함이다.
long id = System.currentTimeMillis();
intent.putExtra(KEY_PARAM_CONTEXT_ID, id);

//위의 식별자를 해당 키로 하여 Map에 Context를 담는다.
mParamContextMap.put(id, context);
}

//부모 Activity의 Context를 반환한다.
protected Context getParamContext() {
return mParamContext;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

//전달된 Context가 있다면 실행한다.
if (mParamContextMap != null) {
long id = getIntent().getLongExtra(KEY_PARAM_CONTEXT_ID, 0);
if (id != 0) {
//Context를 인스턴스에 저장하고 static Map에서는 삭제한다.
mParamContext = mParamContextMap.get(id);
mParamContextMap.remove(id);
}

//Map에 아무것도 없다면 널로 풀어준다.
if (mParamContextMap.size() == 0)
mParamContextMap = null;
}
}
}

 

 

 

부모 Activity에서 자식 Activity 호출...

 

Intent intent = new Intent(this, MyActivity.class);
BaseActivity.putParamContext(intent, this);
startActivity(intent);

 

 

자식 Activity에서 부모 Activity 호출...

 

public class MyActivity extends BaseActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

    Context parentContext = getParamContext();

//부모 Context롤 이용하여 작업한다.

//

//

}

}

 

 

 

 

 

 

도움이 되셨다면~ 정성으로 빚은 저희 앱!  많은 이용 바래요:)

 

https://meorimal.com/index.html?tab=spaceship

 

우주선 - 방치형 인공지능 투자 체험기

미리 맛보는 인공지능 투자!

(주)머리말 meorimal.com

 

https://meorimal.com/subway.html

 

지하철어디있니

더이상 고민하지 마세요. 뛸지 말지 딱 보면 알죠.

(주)머리말 meorimal.com

 

사업자 정보 표시
주식회사 머리말 | 고영진 | 서울특별시 송파구 중대로 135 서관 10층 (가락동, 아이티벤처타워) | 사업자 등록번호 : 524-88-00727 | TEL : 010-9990-3674 | Mail : gyjmeba@hanmail.net | 통신판매신고번호 : 2017-서울강남-03941호 | 사이버몰의 이용약관 바로가기