Context 는
어플리케이션 환경에 관한 글로벌 정보를 접근하기 위한 인터페이스. Abstract 클래스이며 실재 구현은 안드로이드 시스템에 의해 제공된다. Context 를 통해, 어플리케이션에 특화된 리소스나 클래스에 접근할 수 있을 뿐만 아니라, 추가적으로, 어플리케이션 레벨의 작업 - Activity 실행, Intent 브로드캐스팅, Intent 수신 등, 을 수행하기 위한 API 를 호출 할 수도 있다.
라고 안드로이드 개발자 사이트에서 찾아 볼 수 있는데
쉽게 예를 들자면
//Get an application name
String applicationName = this.getPackageName();
//Start a new activity(application)
this.startActivity(new Intent(this, Test.class));
위의 코드처럼 지금 있는 화면의 정보를 알 수 있게 나타내는 정보..?
자신이 어떤 어플리케이션을 나타내고 있는지 알려주는 ID 역할
ActivityManagerService 에 접근할 수 있도록 하는 통로 역할
을 한다고 한다.
* ActivityManagerService 는 안드로이드의 프로세스를 따로 관리하는 매니저인데 여기서 어플리케이션을 관리할때
key - value 로 관리를 한다. 여기서 Context가 key의 역할을 한다고 생각하면 될거 같다.
아래 처럼 쓰일수도 있다.
popupview = View.inflate(getApplicationContext(), R.layout.sidepopup, null); //getApplicationContext()에서 Context를 가져옴
팝업뷰에 파라미터로 Context, int, ViewGroup 이 들어간다
다른거는 넘어가고 Context를 보면 getApplicationContext() 이게 현재 화면의 context를
지정하는 것으로, 저 popupview는 이제 메인화면 위에 뜬다는 소리다. 메인화면의
Context를 받았기 때문.
아래 코드는 직접 작성한 코드인데 사실 이걸 작성하면서 든 의문으로 이 글을 적게 됐다.
@Override
public void onListItemClick(@NonNull ListView l, @NonNull View v, int position, long id) {
ListViewItem item = (ListViewItem) l.getItemAtPosition(position);
String userid = item.getTitle();
//여기서 팝업창 띄우기
//onMyListener.onReceivedData(userid);
Intent intent = new Intent(v.getContext(), PopActivity.class);
intent.putExtra("my_data" , userid);
v.getContext().startActivity(intent); // 인텐트 넘어가는거 성공
// v.getContext 를 하는 이유는 그냥 액티비티에서는 Context 를 굳이 안가져와도 되는데 여기서는 리스트들이 각각 존재하고
// 이런 상황에서 그냥 startActivity만 적어서 실행하면 fragment 에는 Context가 없기 때문에 오류가 난다.
// 그래서 각각 아이템의 view에서 getContext를 해주고 Context를 가지고 있는 상태에서 startActivity를 해야하는것이다.
//그러면 어디서 이 화면으로 넘어가는구나 라는걸 어플리케이션이 알 수 있게 되는것이다.
super.onListItemClick(l, v, position, id);
}
확실하진 않지만 내가 이해한 바로는 코드에 있는 주석대로인거 같다.
여러가지도 찾아본 결과 나온 나만의 결론이지만
확실하게 이해하기 위해선 좀 더 공부가 필요할거 같다.
'Android' 카테고리의 다른 글
코틀린 retrofit2 공부 (0) | 2020.11.16 |
---|---|
안드로이드 - service 정리 (0) | 2020.11.14 |
안드로이드 이중스크롤뷰 (0) | 2020.08.24 |
안드로이드 spinner 테두리와 모서리 둥글게 만들기 (0) | 2020.07.30 |
프래그먼트 화면에서 다른 액티비티로 intent하기 (0) | 2020.07.14 |
Android 공부 근황 #1 (0) | 2020.07.05 |
WebView 만들기 (0) | 2020.06.29 |
SharedPreferences 사용 예제 (0) | 2020.06.29 |