2011-11-26 60 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; 
    } 
}