Frage

Ich habe eine benutzerdefinierte Halbbildansicht und eine Textansicht in meiner Aktivität.

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

Wie kann ich die Textansicht in meiner Aktivität aktualisieren, wenn ich auf die benutzerdefinierte Ansicht klicke?

Derzeit habe ich diesen Code in meinen benutzerdefinierten Ansichten onTouchEvent() aber es trifft eine NullPointerException in der setText() Teil.Sollte ich die Textansicht in meiner benutzerdefinierten Ansicht niemals aktualisieren?

TextView tvScore = (TextView) findViewById(R.id.tvScore);
tvScore.setText("Updated!");
War es hilfreich?

Lösung

Sie können den TextView tvScore im Code Ihrer benutzerdefinierten Ansicht nicht „sehen“. findViewById() sucht nach Ansichten in der Hierarchie, beginnend mit der Ansicht, von der aus Sie sie aufrufen, oder vom Hierarchiestamm, wenn Sie aufrufen Activity.findViewById() (Und das funktioniert natürlich erst danach setContentView()).

Wenn Ihre benutzerdefinierte Ansicht eine zusammengesetzte Ansicht wäre, beispielsweise eine lineare Ansicht, die einige Textansichten enthält, wäre die Verwendung sinnvoll findViewById() da drin.

Die Lösung besteht darin, die Textansicht zum Beispiel in zu finden onCreate() und es dann auf irgendeine Weise an die benutzerdefinierte Ansicht übergeben (wie einige). set..() Methode).

BEARBEITEN

Wenn Sie in Ihrer benutzerdefinierten Ansicht etwas haben wie:

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

Sie können so etwas tun:

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

sodass Sie seitdem einen Verweis auf die Textansicht im Code Ihrer benutzerdefinierten Ansicht haben.Es wäre wie eine Art Setup.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top