gpt4 book ai didi

android - 在自定义 View 中更新 TextView

转载 作者:行者123 更新时间:2023-11-29 16:24:47 27 4
gpt4 key购买 nike

我的 Activity 中有一个半屏自定义 View 和一个 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" />

点击自定义 View 后,如何更新 Activity 中的 TextView?

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

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

最佳答案

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

如果您的自定义 View 是一个复合 View ,比如包含一些 TextView 的线性布局,那么在其中使用 findViewById() 是有意义的。

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

编辑

如果在您的自定义 View 中,您有类似的内容:

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);
...
}

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

关于android - 在自定义 View 中更新 TextView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5050255/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com