Ich bin neu in der Android-Entwicklung und habe immer noch Schwierigkeiten zu verstehen, wie das Framework funktioniert. Ich versuche, ein einfaches Spiel zu schreiben, um etwas Erfahrung zu sammeln, und ich möchte um Hilfe bitten. In meiner Hauptaktivität habe ich ein paar TextViews, um verschiedene Daten aus meinem Spiel zu zeigen, und darunter habe ich eine benutzerdefinierte Ansicht namens AnimatedView, die die Leinwand hat, auf der ich meine Objekte für das Spiel selbst zeichne. Basierend auf den Objekten im Canvas möchte ich die TextViews aktualisieren, um z. Anzahl der Objekte, welche Ebene der Player ist, etc.Android-Benutzeroberfläche von der benutzerdefinierten Ansicht aktualisieren
Das Problem ist, obwohl ich das TextView-Objekt mit dem folgenden Code abrufen kann, wenn ich TextView.setText (...) aufrufen, ändert sich nichts auf dem Benutzeroberfläche.
Das ist eine vereinfachte Version meiner echten Code, zu demonstrieren, das Problem:
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...
tools:context="com.danielsh.test.teststuff.MainActivity"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/myTextView"
android:text="Change this!" />
<com.danielsh.test.teststuff.AnimatedView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/animView" />
</LinearLayout>
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
AnimatedView.java
public class AnimatedView extends View {
public AnimatedView(Context context, AttributeSet attrs) {
super(context, attrs);
final Handler uiHandler = new Handler();
final Runnable runnable = new Runnable() {
public void run() {
LayoutInflater inflater = LayoutInflater.from(getContext());
LinearLayout layout = (LinearLayout) inflater.inflate(R.layout.activity_main, null, false);
TextView textView = (TextView) layout.findViewById(R.id.myTextView);
textView.setText("" + (System.currentTimeMillis()/1000));
textView.invalidate();
}
};
uiHandler.postDelayed(runnable, 1000);
}
}
Ich gehe davon aus, dass ich nicht mit dem eigentlichen Textview-Objekt gerade arbeite, die auf der Benutzeroberfläche, aber nicht sicher, was hat sein die richtige Art und Weise zu tun, dass sichtbar sind.
Jede Hilfe oder ein Zeiger auf einen vorhandenen Beitrag, der sich mit dem gleichen Problem beschäftigt, wäre sehr willkommen.
haben Sie 'textView.invalidate();' versucht, nachdem Sie Text darin gesetzt haben –
@SatyenUdeshi textView.invalidate(); macht keinen Unterschied für mich. –
@tynn handler.postDelayed() ist in der Tat schöner, leider hat das gleiche Problem. –