programing

보기에서 호스팅 활동을 가져오는 방법은 무엇입니까?

javamemo 2023. 8. 8. 19:58
반응형

보기에서 호스팅 활동을 가져오는 방법은 무엇입니까?

나는 있습니다.Activity3과 함께EditText정보를 추가하기 위해 전문 키보드를 작동하는 사용자 정의 보기EditTexts.

현재 저는 합격하고 있습니다.Activity보기로 이동하여 현재 초점을 맞춘 편집 텍스트를 가져오고 사용자 지정 키보드에서 내용을 업데이트할 수 있습니다.

부모 활동을 참조하고 현재의 초점을 맞추는 방법이 있습니까?EditText보기에 활동을 전달하지 않고?

방금 공식 지원 라이브러리에 있는 미디어 라우터에서 소스 코드를 꺼내어 현재까지는 정상적으로 작동합니다.

private Activity getActivity() {
    Context context = getContext();
    while (context instanceof ContextWrapper) {
        if (context instanceof Activity) {
            return (Activity)context;
        }
        context = ((ContextWrapper)context).getBaseContext();
    }
    return null;
}

다음 방법들이 당신을 도울 것입니다.

  1. Activity host = (Activity) view.getContext()그리고
  2. view.isFocused()

사용하기 전에 먼저 최소 활동인지 확인해야 합니다.

if (view.getContext() instanceof Activity){
     Activity host = (Activity) view.getContext();
     //do something with host now
}

업데이트됨

tailrec fun Context.getActivity(): Activity? = this as? Activity
    ?: (this as? ContextWrapper)?.baseContext?.getActivity()

@Westy92 덕분에

용도:

context.getActivity()

저는 고미노의 답변을 받아 Utils.java에 완벽하게 맞게 수정하여 필요할 때 어디서나 사용할 수 있도록 하였습니다.누군가 그것이 도움이 되기를 바랍니다.

abstract class myUtils {
    public static Activity getActivity(View view) {
        Context context = view.getContext();
        while (context instanceof ContextWrapper) {
            if (context instanceof Activity) {
                return (Activity)context;
            }
            context = ((ContextWrapper)context).getBaseContext();
        }
        return null;
    }
}

당신의 견해가 내부에 있다는 것을 알고 있다면 참고하고 싶습니다.Fragment그냥 할 수 있습니다.

FragmentManager.findFragment(this).getActivity();

다음에서 호출합니다.onAttachedToWindow또는onDraw당신은 그것을 더 일찍 부를 수 없습니다).onFinishInflate그렇지 않으면 예외가 발생합니다.

보기가 내부에 있는지 확신할 수 없는 경우Fragment그런 다음 다른 답변을 참조하십시오.고미노, 그냥 밖에 버리고 싶었어요.

@gomino를 기반으로 한 Kotlin 답변

fun View?.getActivitySafely():Activity?{

    var context: Context = this!!.context
    while (context is ContextWrapper) {
        if (context is Activity) {
            return context
        }
        context = context.baseContext
    }
    return null
}

View가 상위 활동을 검색하기 위한 Kotlin 확장 속성:

val View.activity: Activity?
get() {
    var ctx = context
    while (true) {
        if (!ContextWrapper::class.java.isInstance(ctx)) {
            return null
        }
        if (Activity::class.java.isInstance(ctx)) {
            return ctx as Activity
        }
        ctx = (ctx as ContextWrapper).baseContext
    }
}

Android 7+에서는 보기가 더 이상 동봉 활동에 액세스할 수 없습니다.view.getContext()더 이상 활동에 캐스팅할 수 없습니다.

대신 아래 코드는 Android 7+ 및 6에서 작동합니다.

private static Activity getActivity(final View view) {
    return (Activity) view.findViewById(android.R.id.content).getContext();
}

@UrlLoading(WebView 보기, WebResourceRequest 요청) {if(request.getUrl().startsWith("pay.google.com ")} {Intent = newIntent(Intent).ACTION_VIEW, request.getUrl(); view.getContext().startActivity(의도); true 반환; } ... }

언급URL : https://stackoverflow.com/questions/8276634/how-to-get-hosting-activity-from-a-view

반응형