I am tring to setText in another thread, that is, child thread. But for the following code, it is giving the error

Only the original thread that created a view hierarchy can touch its views.

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); img = (ImageView)findViewById(R.id.img); pb = (ProgressBar)findViewById(R.id.pb); this.tv = (TextView)findViewById(R.id.perc); tv.setText("30 %"); pb.setProgress(30); pb.setMax(100); } public void set(int p) { tv.setText(p + " %"); } protected void onStart() { super.onStart(); pb.setProgress(20); Thread t = new Thread(new Runnable() { @Override public void run() { try { int i = pb.getProgress(); while(i <100) { while(pb.getProgress()<100) { pb.incrementProgressBy(5); Thread.sleep(1000); } i+=10; pb.setProgress(i); Thread.interrupted(); set(i); } } catch (InterruptedException e) { e.printStackTrace(); } } }); t.start(); } 
3

4 Answers

You need a reference to that textview and then do:

textView.post(new Runnable() { public void run() { textView.setText(yourText); } }); 

in Kotlin:

val textView: TextView = findViewById(R.id.textView) textView.post(Runnable { textView.setText(yourText) }) 
6

Use runOnUiThread for updating the UI control. In your case:

runningActivity.runOnUiThread(new Runnable() { public void run() { tv.setText(p + " %"); } }); 

Edited:

Activity mActivity; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); mActivity= this; ... ..//The rest of the code } //close oncreate() thread{ mActivity.runOnUiThread(new Runnable() { public void run() { tv.setText(p + " %"); } }); } 
3

Either you can use runOnUiThread or use Handler to set text in TextView.

You can use handle :

handler.post(new Runnable() { public void run() { textView.setText(yourText); } }); 

But your textView and yourText must be class fields.

In your thread (activity) where you create textView use:

Handler handler = new Handler(); 

And pass handler into another thread.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy