보기에서 호스팅 활동을 가져오는 방법은 무엇입니까?
나는 있습니다.Activity
3과 함께EditText
정보를 추가하기 위해 전문 키보드를 작동하는 사용자 정의 보기EditText
s.
현재 저는 합격하고 있습니다.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;
}
다음 방법들이 당신을 도울 것입니다.
Activity host = (Activity) view.getContext()
그리고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
'programing' 카테고리의 다른 글
서명된 Git 커밋을 확인하는 중입니까? (0) | 2023.08.08 |
---|---|
GitHub은 페이지를 다시 로드하지 않고 URL을 어떻게 변경합니까? (0) | 2023.08.08 |
함수 nodejs의 mariadb에서 반환 값 (0) | 2023.08.08 |
Powershell에서 인증된 웹 요청을 만드는 방법은 무엇입니까? (0) | 2023.08.08 |
CSS를 사용하여 여러 개의 배경 이미지를 가질 수 있습니까? (0) | 2023.08.08 |