如何从位于选项卡内部的活动获取视图,而视图位于选项卡外部

发布于 2024-11-06 10:38:27 字数 1073 浏览 4 评论 0原文

我有一个包含操作栏和选项卡的布局:

<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 - 我发现这非常合乎逻辑,因为对于选项卡内的任何活动,它们的 contentRoot 是 FrameLayout (而操作栏位于它的一侧),但尽管如此,我需要访问操作栏,因为图标所有当前可用的操作都位于那里。

我还考虑过将操作栏作为额外的内容传递给选项卡内所有活动的意图,但 View 不可序列化或可打包,因此它不能作为额外的内容传递。

I have a layout which inludes actionbar and tabs:

<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>

And on the actionbar I have several buttons that I need to be able to access from activities within tabs. But findViewById returns null for any view located on the actionbar - I find this quite logical, because for any activity inside tab their contentRoot is FrameLayout (and actionbar is ourside of it), but nevertheless I need an access to the actionbar, because icons for all currently available actions are located there.

I also have thought of passing actionbar as extra to intents for all activities inside tabs, but View is not serializable nor Parcelable, so it can't be passed as extra.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

抹茶夏天i‖ 2024-11-13 10:38:27

让 TabActivity 提供对操作栏的访问。子活动应使用以下代码请求操作栏,例如:

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

Let TabActivity provide access to actionbar. Child activities should request actionbar using the following code, e.g.:

View actionBar = ((CustomTabActivity) getParent()).getActionBar();
醉殇 2024-11-13 10:38:27

您将获得操作栏视图。

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

You will get action bar view.

int resId = getResources().getIdentifier("action_bar_container", "id", "android");
View actionbarView =  getWindow().getDecorView().findViewById(resId);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文