Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set text of text view in another thread

Tags:

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();
}
like image 202
Ravi Ranjan Avatar asked Mar 27 '12 06:03

Ravi Ranjan


People also ask

How do I set text view?

Set the TextView text programmaticallyInside the Activity class where you want to set the text, find the TextView using the findViewById() method. Then, use the setText() method to set the new text. Here's the code example in Java: TextView myTextView = findViewById(R.

How do you add a new line in text view?

Add Line Breaks to a TextView Just add a \n to your text. This can be done directly in your layout file, or in a string resource and will cleanly break the text in your TextView to the next line.

Does service Run on separate thread Android?

Service runs in the main thread of its hosting process; the service does not create its own thread and does not run in a separate process unless you specify otherwise.


1 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) })
like image 110
Bondax Avatar answered Nov 09 '22 17:11

Bondax