如何使用从另一个类生成的视图?

时间:2012-06-25 14:38:57

标签: android view

AOSP 4.0.4中的expanded_status_bar布局在XML中有一个类似于此的TextView

<com.android.systemui.statusbar.policy.DateView
    android:id="@+id/date"
    android:textAppearance="@style/TextAppearance.StatusBar.Date"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingTop="4dp"
    android:singleLine="true"
    android:gravity="center"
    android:visibility="visible" />

它由&#34; frameworks / base / packages / SystemUI / src / com / android / systemui / statusbar / policy / DateView.java&#34;

生成

它被&#34; frameworks / base / packages / SystemUI / src / com / android / systemui / statusbar / phone / PhoneStatusBar.java&#34;像这样:

ExpandedView expanded = (ExpandedView) View.inflate(context, R.layout.status_bar_expanded, null);
// stuff here
mDateView = (DateView) expanded.findViewById(R.id.date);

我想通过另一个班级来设置它的知名度,我已经尝试了一些我在这里读过的东西,都没有运气。我尝试的最后一件事是在我的班级(也是systemui的一部分)中添加以下内容:

TextView mDateView = (TextView) findViewById(R.id.date);
mDateView.setVisibility(View.GONE);

然而,事实证明我的课程中mDateView为null。有什么我想念的吗?我一直在寻找几个小时,在这里和那里尝试一些事情,但没有任何作用。我有中级Java技能,我仍然试图用20年的程序语言包围我的OOP。提前谢谢。

我将mDateView的定义更改为:

private DateView mDateView;
DateView mDateView = (DateView) findViewById(R.id.date);

但我仍然将mDateView视为null:(

2 个答案:

答案 0 :(得分:1)

最初我误解了你的问题,你可以在一个类中添加方法并通过另一个类访问它。

public static void hideDateView() {
        mDateView.setVisibility(View.GONE);
    }

您可以在 PhoneStatusBar .java中添加以下方法,稍后再调用。

答案 1 :(得分:0)

我可以看到两个问题:

1)您需要将拥有Context的{​​{1}}传递到您要使用该视图的班级。

假设ViewContext,您就可以使用Activity

2)如果你要使用activity.findViewById(R.id.date),你需要确保已经以某种方式将视图添加到视图层次结构中(除非你明确告诉它,否则它不会这样做至)。 findViewById(R.id.date)函数提供了一种方法,通过传入父视图而不是inflate()后跟一个额外的布尔参数来指定是否应该将膨胀的视图添加到父视图。

或者,您可以在现有的充气通话后说null

相关问题