Ce code est dans Oncreate dans la MainActivité
inflater = getLayoutInflater(); serversView = inflater.inflate(R.layout.layout_home, null, false); test = serversView.findViewById(R.id.titleDescription); Thread thread = new Thread(new Runnable() { @Override public void run() { try { //some code runOnUiThread(new Runnable() { @Override public void run() { test.setText(utf8text+"mk"); Log.i(LOG_TAG,"serversView: "+ serversView + " test: "+ test + " test.getText().toString():"+ test.getText().toString()); } }); } catch (Exception e) { e.printStackTrace(); } } }); thread.start();
3 Réponses :
SERVERSVIEW.INVALIDATEVIEWS (); P> public void run() {
test.setText(utf8text+"mk");
serversView.invalidateViews();
Log.i(LOG_TAG,"serversView: "+ serversView + " test: "+ test + "test.getText().toString():"+ test.getText().toString());
}
S'il vous plaît essayez d'utiliser Serversview.invalidate ()
L'interface utilisateur ne peut pas être mis à jour par fil non UI, mais Android fournit la classe Android.os.Handler ou les classes d'asynctaques, ci-dessous est le code d'échantillon pour le gestionnaire de thread l'essayer.
public class MainActivity extends AppCompatActivity { private ProgressBar progress; private TextView text; Handler handler; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); progress = findViewById(R.id.progressBar1); text = findViewById(R.id.textView1); handler = new Handler(); } public void startProgress(View view) { // do something long Runnable runnable = new Runnable() { @Override public void run() { for (int i = 0; i <= 10; i++) { final int value = i; doFakeWork(); handler.post(new Runnable(){ @Override public void run() { progress.setProgress(value); if(value!=10) text.setText("updated"); else text.setText("updating"); } }); } } }; new Thread(runnable).start(); } // Simulating something timeconsuming private void doFakeWork() { try { SystemClock.sleep(5000);} catch (Exception e) {e.printStackTrace();}}}
Ça n'aide pas. Peut-on avoir besoin de méthode de startProgress mis à Oncreate?
Aucune méthode de démarrage ci-dessus répond à Bouton Cliquez sur l'événement. J'ai ajouté cette méthode dans l'attribut OnClick du bouton dans la mise en page XML, avez-vous eu une erreur?
J'ai inséré cela dans Oncreate, mais toujours, TextView ne modifie pas le texte dans l'interface utilisateur, mais lors de la journalisation - changements
Oh, j'ai réalisé que vous devez l'insérer lorsque vous cliquez sur le bouton, j'ai tout fait tout, mais dans l'interface utilisateur ne change rien comme avant, et lorsque la journalisation change
Utiliser le gestionnaire de threads UI sera mis à jour à coup sûr. Je mette à jour votre code dans une autre réponse.
Ouais, quand tu m'as donné ton code. Maintenant, j'ai fabriqué Ctrl + Z avant mon code et il s'est avéré que mon code fonctionne, seul le problème n'est que sur la principaactivité, mais comment le faire de manière à pouvoir être modifié en ne pas transférer le code dans les classes de fragments?
Désolé, je n'ai pas eu de vouloir que vous essayiez de poser des questions sur la classe de fragments dans le code de thread ??
classe de manutention du fil, essayez-le. } P> P>
Vous pouvez communiquer les données de l'activité actuelle à une autre activité (à l'aide d'une intention explicite) ou de fragment (en définissant des arguments sur ce fragment), puis utilisez ces données dans l'interface utilisateur.