【问题标题】:findViewById on Custom Title Bar within Tab Activity选项卡活动中自定义标题栏上的 findViewById
【发布时间】:2011-10-14 13:11:38
【问题描述】:

我在 TabActivity 上设置了自定义标题栏。自定义标题栏包含一个 TextView 和一个 ImageView。 tabHost 有多个标签。

我要做的是访问选项卡中的 ImageView 资源。

我正在从主 Tab 活动(扩展 TabActivity)中的自定义标题栏访问 TextView,它工作正常。以下是在主要活动中运行良好的代码:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.myactivity);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mycustomtitle);
TextView tv = (TextView) findViewById(R.id.viewTitleId);

现在我想在我的选项卡(已添加到 tabHost)中访问 ImageView。如果我在选项卡中设置以下代码:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);

它给出以下错误:

You cannot combine custom titles with other title features

如果我直接在标签代码中设置以下:

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mycustomtitle);
ImageView image = (ImageView) findViewById(R.id.imageTitleId);

图像保持为空。

mycustomtitle.xml 有以下两个元素:

<TextView 
     android:layout_width="0dp"
     android:layout_height="wrap_content" 
     android:layout_weight="0.80"
     android:id="@+id/viewTitleId"
     android:textColor="@color/titleBarTextColor"
     android:gravity="center_vertical"
     android:text="@string/viewText"
     android:textSize="18px"
     android:paddingLeft="45px"
     />

<ImageView 
    android:layout_height="wrap_content" 
    android:layout_width="0dp" 
            android:layout_weight="0.20"
    android:src="@drawable/btn_save" 
    android:id="@+id/imageTitleId"
    >
</ImageView>

请告诉我如何在选项卡中访问自定义标题的 ImageView?

【问题讨论】:

    标签: java android android-tabhost tabactivity


    【解决方案1】:

    您可以通过在TabActivity 中声明public static 来访问TextViewImageView。然后,在Sub-Activity 中你显然可以访问公共静态TextView 和ImageView 之类的,

    Main_Tab_Activity.textView.setText("my_text_view");
    

    【讨论】:

    • 这是一个非常糟糕的建议。请停止为 SO 用户制造内存泄漏。
    • 如果你没有明确地将公共静态字段设为空,它们将永远持有对视图的引用,即使 TabActivity 实例已经被销毁。通过保留对视图的引用,您实际上会泄漏整个活动。
    • @ct_rob 在这种情况下如何添加替代解决方案。仅仅给出理由是不够的。
    • 对于那些有知识但没有时间的人:-我只能看到三个答案,一个来自 Venky,另一个来自 Lalit,一个来自 JaiSoni..现在在这种情况下,我只能选择查看它们,采取他们,他们....如果有任何其他答案,我也会考虑他们。
    • @lalit 我自己还在寻找答案,我刚刚回答了 ericlee 的问题,为什么给出的答案可能会导致内存泄漏。您在 SO 上看到很多答案,只是建议人们使用公共静态引用,这几乎总是一个非常糟糕的解决方案。
    【解决方案2】:

    如果您只在 Main TabActivity 中放置自定义标题栏,则标题栏将出现在您的所有 Sub-TabActivity 中。

    例如,如果您在 Main TabActivity 中提供了自定义标题栏:

    requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.main_layout);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.header_layout);
    TextView tv = (TextView) findViewById(R.id.viewTitleId);
    ImageView image = (ImageView)findViewById(R.id.imageTitleId);
    

    没有必要放弃所有的子标签活动。

    在您刚刚设置的所有子选项卡活动中setContentView(R.layout.sub_layout);

    【讨论】:

    • 是的@Venky,我们可以在主 tabactivity 中访问 textview 和 imageview。但我想在我的子选项卡活动中访问 ImageView。我希望每个子选项卡上的 ImageView 有不同的行为。
    • @rizzz86 为什么需要在子活动中使用该图像?默认会出现在所有的Sub Activity中吧?
    • 是的,它出现在所有子活动中。但是当我单击 ImageView 时,每个子选项卡上都需要不同的行为。例如,当单击带有第一个打开选项卡的 ImageView 时,它将在 table1 中存储值,如果单击带有第二个打开选项卡的 ImageView,它将在 table2 等中存储值
    • @rizzz86 来chat.stackoverflow.com/rooms/1531/casual-chat聊天室..我们会讨论
    • 感谢您的支持@Venky。我从 Lalit Poptani 那里得到了答案
    【解决方案3】:

    使用

    getParent().getWindow().findViewById(id)
    

    insted id findViewById(id); 访问任何父视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多