Change Android ProgressBar message when loading percent

I am trying to add a message when a progress bar loads with a certain percentage. Therefore, when 10 percent is loaded, a heading or message appears that something is loading. I can’t do it, and it makes me close. Any ideas how to do this.

Below is my sample code

public void onClick(View v) { // prepare for a progress bar dialog progressBar = new ProgressDialog(v.getContext()); progressBar.setCancelable(true); progressBar.setMessage("File downloading ..."); progressBar.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); progressBar.setProgress(0); progressBar.setMax(100); progressBar.show(); //getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS); //reset progress bar status progressBarStatus = 0; //reset filesize fileSize = 0; new Thread(new Runnable() { public void run() { while (progressBarStatus < 100) { // process some tasks progressBarStatus = doSomeTasks(); // your computer is too fast, sleep 1 second try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } // Update the progress bar progressBarHandler.post(new Runnable() { public void run() { progressBar.setProgress(progressBarStatus); } }); } // ok, file is downloaded, if (progressBarStatus >= 100) { // sleep 2 seconds, so that you can see the 100% try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } // close the progress bar dialog progressBar.dismiss(); } } }).start(); } }); } // file download simulator... a really simple public int doSomeTasks() { while (fileSize <= 1000000) { fileSize++; setProgressBarIndeterminate(true); if (fileSize == 100000) { progressBar.setMessage("10 percent loaded"); return 10; } else if (fileSize == 200000) { progressBar.setMessage("20 percent loaded"); return 20; } else if (fileSize == 300000) { progressBar.setMessage("30 percent loaded"); return 30; } // ...add your own } return 100; } 

Thanks to users of StackOverFlow

+4
source share
2 answers

Try updating the progress bar, for example, below the code ...

 //To use the AsyncTask, it must be subclassed private class LoadViewTask extends AsyncTask<Void, Integer, Void> { //Before running code in separate thread @Override protected void onPreExecute() { //Create a new progress dialog progressDialog = new ProgressDialog(LoadingScreenActivity.this); //Set the progress dialog to display a horizontal progress bar progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); //Set the dialog title to 'Loading...' progressDialog.setTitle("Loading..."); //Set the dialog message to 'Loading application View, please wait...' progressDialog.setMessage("Loading application View, please wait..."); //This dialog can't be canceled by pressing the back key progressDialog.setCancelable(false); //This dialog isn't indeterminate progressDialog.setIndeterminate(false); //The maximum number of items is 100 progressDialog.setMax(100); //Set the current progress to zero progressDialog.setProgress(0); //Display the progress dialog progressDialog.show(); } //The code to be executed in a background thread. @Override protected Void doInBackground(Void... params) { /* This is just a code that delays the thread execution 4 times, * during 850 milliseconds and updates the current progress. This * is where the code that is going to be executed on a background * thread must be placed. */ try { //Get the current thread token synchronized (this) { //Initialize an integer (that will act as a counter) to zero int counter = 0; //While the counter is smaller than four while(counter <= 4) { //Wait 850 milliseconds this.wait(850); //Increment the counter counter++; //Set the current progress. //This value is going to be passed to the onProgressUpdate() method. publishProgress(counter*25); } } } catch (InterruptedException e) { e.printStackTrace(); } return null; } //Update the progress @Override protected void onProgressUpdate(Integer... values) { //set the current progress of the progress dialog progressDialog.setProgress(values[0]); } //after executing the code in the thread @Override protected void onPostExecute(Void result) { //close the progress dialog progressDialog.dismiss(); //initialize the View setContentView(R.layout.main); } } 

and call this AsyncTask where you want to show the progress bar ...

 //Initialize a LoadViewTask object and call the execute() method new LoadViewTask().execute(); 
+2
source

Use AsynTask instead of main threads. Inside asynctask, use the onProgressUpdate to call progressBar.setProgress(progressBarStatus);

You can access the user interface elements from the main thread.

+2
source

Source: https://habr.com/ru/post/1435004/


All Articles