2011-11-26 38 views
127

举办活动我有一个Activity 3个EditText S和作用专门的键盘将信息添加到EditText个自定义视图。的Android得从视图

目前,我经过Activity到视图,这样我可以得到当前焦点编辑文本和更新从自定义键盘的内容。

有引用父活动和获取当前聚焦EditText,而没有经过活动到视图的方法吗?

+5

正确的答案是gomino。 – djunod

回答

152

下面的方法可以帮助你

  1. Activity host = (Activity) view.getContext();和
  2. view.isFocused()
+25

不要忘记,如果您的View未从Activity上下文中调用,getContext()可能并不总是返回一个Activity对象。确保提前做好计划并提供适当的回退。 –

+1

@WordPressDeveloper - 如何在没有活动的情况下创建视图?你的意思是远程查看?在活动外部是否还有其他视图情况? –

+1

@kilaka小工具,碎片,RemoteViews,LayoutInflaters情况下,你可以创建不依赖于一个活动视图的所有情况。 –

195

我只是拉那源代码从MediaRouter在official support library,到目前为止,它工作得很好:

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

while?为什么呢? –

+2

这只是一种方式,可以通过所有基本上下文,直到找到活动,或者在找到根上下文时退出循环。导致根上下文将有一个null baseContext,导致循环结束。 – Gomino

+10

这是一个更好的方式来做到这一点。它应该被标记为答案。 – shadox

0

在Android中7+认为没有进入封闭活动了,所以view.getContext()不能再转换成活动。

相反,下面的代码工作在Android的7+和6:

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

我把Gominoanswer并修改它完全适合在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; 
    } 
}