Je suis nouveau sur le développement Android, et j'ai encore des difficultés à comprendre le fonctionnement du framework. J'essaie d'écrire un jeu simple pour avoir de l'expérience et je voudrais demander de l'aide avec ce qui suit. Dans mon activité principale, j'ai quelques TextViews pour montrer diverses données de mon jeu, et sous celles-ci j'ai une vue personnalisée appelée AnimatedView qui a la toile où je dessine mes objets pour le jeu lui-même. Basé sur les objets sur le canevas, je voudrais mettre à jour les TextViews pour montrer, par exemple. Le problème est, même si je peux obtenir l'objet TextView avec le code ci-dessous, quand j'appelle textView.setText (...), rien ne change sur le UI.Mise à jour de l'interface utilisateur Android à partir de la vue personnalisée
Ce qui suit est une version simplifiée de mon code réel, pour démontrer le problème:
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);
}
}
Je suppose que je ne travaille pas avec l'objet TextView réelle qui est visible sur l'interface utilisateur, mais pas sûr qu'as la bonne façon de le faire.
Toute aide ou pointeur vers un article existant traitant du même problème serait très apprécié.
avez-vous essayé 'textView.invalidate();' après avoir défini le texte à l'intérieur –
@SatyenUdeshi textView.invalidate(); ne fait pas de différence pour moi. –
@tynn handler.postDelayed() est en effet plus agréable, malheureusement, a le même problème. –