2011-05-11 4 views
1

나는 액션 바 및 탭 inludes 레이아웃이 있습니다방법 탭 내부에 위치하는 활동에서보기를 얻을 수

<TabHost xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@android:id/tabhost" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <LinearLayout style="@style/BackgroundLayer"> 

     <!-- Action Bar with buttons --> 
     <include layout="@layout/incl_actionbar"/> 

     <TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/> 
     <FrameLayout 
      android:id="@android:id/tabcontent" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent" 
      android:padding="5dp" /> 
    </LinearLayout> 

</TabHost> 

그리고 내가 가지고있는 액션 바에서을 탭 내의 액티비티에서 액세스 할 수 있어야하는 몇 가지 버튼. 하지만 findViewById는 액션 바에있는보기에 대해 null을 반환합니다. Tab의 모든 activity에 대해 contentRoot가 FrameLayout (및 액션 바가 여기에 해당됩니다)하지만 액션 바에 대한 액세스가 필요하기 때문에 매우 논리적입니다. 현재 사용 가능한 모든 작업이 여기에 있습니다.

또한 탭 안의 모든 활동에 대해 액션 바를 인 텐트로 전달하려고했지만 View는 직렬화 가능하거나 Parcelable이 아니므로 추가로 전달할 수 없습니다.

답변

2

TabActivity가 작업 표시 줄에 대한 액세스를 제공합니다. 하위 활동은 다음 코드를 사용하여 작업 표시 줄을 요청해야합니다. 예 :

View actionBar = ((CustomTabActivity) getParent()).getActionBar(); 
+0

고마워요. 정확히 제가 원했던 것입니다. – Fury

+0

'ActionBar'는'View'에서 상속받지 않습니다. 그러면 앱이 간단히 작동하지 않게 될 것입니다. 그게 어떻게 해결 될까요? – Matthias

0

액션 바보기가 표시됩니다.

int resId = getResources().getIdentifier("action_bar_container", "id", "android"); 
View actionbarView = getWindow().getDecorView().findViewById(resId);