나는이 Activity
3 개 EditText
의과에 정보를 추가 할 특수 키보드 역할을하는 사용자 지정보기 EditText
들.
현재 Activity
뷰에 전달하여 현재 포커스가있는 편집 텍스트를 가져오고 사용자 정의 키보드에서 내용을 업데이트 할 수 있습니다.
부모 활동을 참조 EditText
하고 활동을 뷰에 전달하지 않고 현재 초점을 맞추는 방법이 있습니까?
답변
방금 공식 지원 라이브러리 의 MediaRouter에서 해당 소스 코드를 가져 와서 잘 작동했습니다.
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()
답변
나는 Kotlin으로 작성된이 솔루션을 좋아합니다.
tailrec fun Context?.activity(): Activity? = when (this) {
is Activity -> this
else -> (this as? ContextWrapper)?.baseContext?.activity()
}
View
수업 에서의 사용법
context.activity()
디 컴파일 된 코드 :
public static final Activity activity(Context context) {
while (!(context instanceof Activity)) {
if (!(context instanceof ContextWrapper)) {
context = null;
}
ContextWrapper contextWrapper = (ContextWrapper) context;
if (contextWrapper == null) {
return null;
}
context = contextWrapper.getBaseContext();
if (context == null) {
return null;
}
}
return (Activity) context;
}
답변
Gomino 의 대답을 취하여 myUtils.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;
}
}
답변
Android 7 이상에서는 뷰가 더 이상 엔 클로징 활동에 액세스 할 view.getContext()
수 없으므로 더 이상 활동으로 캐스트 할 수 없습니다.
대신 아래 코드는 Android 7 이상 및 6에서 작동합니다.
private static Activity getActivity(final View view) {
return (Activity) view.findViewById(android.R.id.content).getContext();
}
답변
부모 활동을 검색하기위한 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
}
}
답변
@Override public boolean shouldOverrideUrlLoading (WebView view, WebResourceRequest request) {if (request.getUrl (). getHost (). startsWith ( “pay.google.com”)) {의도 의도 = 새로운 의도 (Intent.ACTION_VIEW, request.getUrl ()); view.getContext (). startActivity (intent); true를 반환; } … …}