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!");
Was it helpful?

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top