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
https://meorimal.com/subway.html
'개발 > android' 카테고리의 다른 글
EditText에 자동으로 단위 콤마 넣기 (0) | 2019.01.17 |
---|---|
sqlite의 time이 자정을 인식 못할 경우, 간단한 꼼수 해결법 (0) | 2018.09.27 |
ListView에 EditText를 넣을때 반드시 살펴봐야 할점 (0) | 2017.09.11 |
부등호 없는 부등식 소스를 짜보자 (0) | 2017.06.27 |
간단한 코딩으로 큰따음표("")로 묶인 CSV 파일 보기 (0) | 2016.11.14 |