更新自定义 View 中的 TextView

发布于 2024-10-17 22:31:48 字数 706 浏览 5 评论 0原文

我的活动中有一个半屏自定义视图和一个 TextView。

<com.sted.test.mainView
    android:id="@+id/mainView" android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

<TextView android:id="@+id/tvScore" android:layout_height="wrap_content" android:layout_width="wrap_content"
    android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" />

单击自定义视图后,如何更新活动中的 TextView?

目前,我在自定义视图的 onTouchEvent() 中有这段代码,但它在 setText() 部分遇到了 NullPointerException。我应该永远不更新自定义视图中的 TextView 吗?

TextView tvScore = (TextView) findViewById(R.id.tvScore);
tvScore.setText("Updated!");

I have a half screen custom view and a TextView in my activity.

<com.sted.test.mainView
    android:id="@+id/mainView" android:layout_width="fill_parent"
    android:layout_height="fill_parent" />

<TextView android:id="@+id/tvScore" android:layout_height="wrap_content" android:layout_width="wrap_content"
    android:layout_alignParentLeft="true" android:layout_alignParentBottom="true" />

Upon clicking on the custom view, how can I update the TextView in my activity?

Currently I have this piece of coding in my custom view's onTouchEvent() but it hits a NullPointerException in the setText() part. Should I never update the TextView in my custom view?

TextView tvScore = (TextView) findViewById(R.id.tvScore);
tvScore.setText("Updated!");

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

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

发布评论

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

评论(1

ぽ尐不点ル 2024-10-24 22:31:49

您无法在自定义视图的代码中“查看”TextView tvScore。 findViewById() 从调用它的视图开始在层次结构中查找视图,如果您调用 Activity.findViewById(),则从层次结构根开始查找视图(当然这只有在 setContentView() 之后才有效)。

如果您的自定义视图是复合视图,例如包含一些 TextView 的线性图层,那么在其中使用 findViewById() 是有意义的。

解决方案是在 onCreate() 中找到文本视图,然后以某种方式将其传递给自定义视图(例如某些 set..() 方法)。

编辑

如果在您的自定义视图中您有类似的内容:

public class CustomView extends View {
    ...
    TextView tvToUpdate;
    public void setTvToUpdate(TextView tv) {
        tvToUpdate = tv;
    }
    ...
}

您可以执行类似的操作:

protected void onCreate(Bundle bundle) {
    ...
    CustomView cv = (CustomView) findViewById(R.id.customview);
    TextView tv = (TextView) findViewById(R.id.tv);
    cv.setTvToUpdate(tv);
    ...
}

这样您就可以在自定义视图的代码中引用textview。这就像某种设置。

You can't "see" the TextView tvScore in your custom view's code. findViewById() looks for views in the hierarchy starting from the view from which you're calling it, or from hierarchy root if you're calling Activity.findViewById() (and of course this works only after setContentView()).

If your custom view was a compound view like say a linear layour containing some TextViews, then it would make sense using findViewById() in there.

The solution is finding the textview for example in onCreate() and then passing it to the custom view in some way (like some set..() method).

EDIT

If in your custom view you have something like:

public class CustomView extends View {
    ...
    TextView tvToUpdate;
    public void setTvToUpdate(TextView tv) {
        tvToUpdate = tv;
    }
    ...
}

you can do something like:

protected void onCreate(Bundle bundle) {
    ...
    CustomView cv = (CustomView) findViewById(R.id.customview);
    TextView tv = (TextView) findViewById(R.id.tv);
    cv.setTvToUpdate(tv);
    ...
}

so that since then you would have a reference to the textview inside your custom view's code. It would be like some sort of setup.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文