티스토리 뷰
Stack Overflow에 자주 검색, 등록되는 문제들과 제가 개발 중 찾아 본 문제들 중에서 나중에도 찾아 볼 것 같은 문제들을 정리하고 있습니다.
Stack Overflow에서 가장 먼저 확인하게 되는 가장 높은 점수를 받은 Solution과 현 시점에 도움이 될 수 있는 가장 최근에 업데이트(최소 점수 확보)된 Solution을 각각 정리하였습니다.
아래 word cloud를 통해 이번 포스팅의 주요 키워드를 미리 확인하세요.
Getting activity from context in android
안드로이드에서 Context로부터 Activity를 가져오기
문제 내용
This one has me stumped.
이 문제는 제가 해결할 수 없습니다.
I need to call an activity method from within a custom layout class. The problem with this is that I don't know how to access the activity from within the layout.
커스텀 레이아웃 클래스 내에서 액티비티 메소드를 호출해야합니다. 이 문제는 레이아웃 내에서 액티비티에 대한 접근 방법을 알지 못하기 때문입니다.
ProfileView
public class ProfileView extends LinearLayout
{
TextView profileTitleTextView;
ImageView profileScreenImageButton;
boolean isEmpty;
ProfileData data;
String name;
public ProfileView(Context context, AttributeSet attrs, String name, final ProfileData profileData)
{
super(context, attrs);
......
......
}
//Heres where things get complicated
public void onClick(View v)
{
//Need to get the parent activity and call its method.
ProfileActivity x = (ProfileActivity) context;
x.activityMethod();
}
}
ProfileActivity
public class ProfileActivityActivity extends Activity
{
//In here I am creating multiple ProfileViews and adding them to the activity dynamically.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.profile_activity_main);
}
public void addProfilesToThisView()
{
ProfileData tempPd = new tempPd(.....)
Context actvitiyContext = this.getApplicationContext();
//Profile view needs context, null, name and a profileData
ProfileView pv = new ProfileView(actvitiyContext, null, temp, tempPd);
profileLayout.addView(pv);
}
}
As you can see above, I am instantiating the profileView programatically and passing in the activityContext with it. 2 questions:
위에서 볼 수 있듯이, 저는 ProfileView를 프로그래밍 방식으로 인스턴스화하고 activityContext를 함께 전달합니다. 2 가지 질문:
- Am i passing the correct context into the Profileview?
- How do I get the containing activity from the context?
1. ProfileView에 올바른 context를 전달하고 있나요?
2. Context에서 포함된 액티비티를 어떻게 가져올 수 있나요?
높은 점수를 받은 Solution
From your Activity
, just pass in this
as the Context
for your layout:
Activity에서 레이아웃의 Context로 this를 전달하면 됩니다:
ProfileView pv = new ProfileView(this, null, temp, tempPd);
Afterwards you will have a Context
in the layout, but you will know it is actually your Activity
and you can cast it so that you have what you need:
그 후에 레이아웃에서 Context를 가지게됩니다. 그러나 실제로 액티비티이므로 캐스트하여 필요한 것을 얻을 수 있습니다:
Activity activity = (Activity) context;
가장 최근 달린 Solution
And in Kotlin:
그리고 코틀린에서는:
tailrec fun Context.activity(): Activity? = when {
this is Activity -> this
else -> (this as? ContextWrapper)?.baseContext?.activity()
}
출처 : https://stackoverflow.com/questions/9891360/getting-activity-from-context-in-android
'개발 > 안드로이드' 카테고리의 다른 글
액티비티 바깥에서에서 getLayoutInflater()를 호출하기 (0) | 2023.01.12 |
---|---|
안드로이드에서 ImageView의 배경 투명하게 설정하기 (0) | 2023.01.11 |
안드로이드 웹뷰에서 위치정보 사용하기 (0) | 2023.01.10 |
다이얼로그에 EditText 추가하기 (0) | 2023.01.10 |
프래그먼트에서 액티비티 함수 호출하기 (0) | 2023.01.10 |