티스토리 뷰

반응형

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 가지 질문:

 

  1. Am i passing the correct context into the Profileview?
  2. 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

반응형
댓글
공지사항
최근에 올라온 글