Domanda

Ho una vista personalizzata a metà schermo e una messa a punto nella mia attività.

.

<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" />
.

Al momento clic sulla visualizzazione personalizzata, come posso aggiornare la messa a aggiornare la testisione nella mia attività?

Attualmente ho questo pezzo di codifica nel mio onTouchEvent() di View personalizzato, ma colpisce una NullPointerException nella parte setText().Non dovrei mai aggiornare la testist nella mia vista personalizzata?

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

È stato utile?

Soluzione

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top