Update TextView in a custom View
-
15-11-2019 - |
Question
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!");
Solution
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.