I have a task to add a ProgressBar
with percentage values on it to show a value when the user wants to predict something. I'm not using ProgressDialog
since it's now deprecated. Here, the percentage value depends on how long it is from start a request until it's completed. I'm using Volley
to fetch data from server.
Here goes a sample image of what I'm trying to achieve:
i already did like this
i have implement a horizontal progress bar inside an alert dialog (i'm using this way because progress dialog is deprecated). i want to setProgress the progress bar like this.
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_result_prediction, container, false);
predictProgress = (ProgressBar) view.findViewById(R.id.progressbarPredict);
AlertDialog.Builder(view.getContext());
builder.setCancelable(false); // if you want user to wait for some process to finish,
View v = inflater.inflate(R.layout.layout_loading_dialog, null);
builder.setView(v);
final AlertDialog dialog = builder.create();
submitPredictPlant.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dialog.show();
predictProgress.setProgress(25);
predictProgress.setProgress(50);
predictProgress.setProgress(75);
predictProgress.setProgress(100);
dialog.dismiss();
i want to dismiss the dialog when the progress is 100. but this give an error like
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ProgressBar.setProgress(int)' on a null object reference
i already refer the progress bar from layout_loading_dialog that is used in builder.setview.
here is the layout_loading_dialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="20dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="4"
android:gravity="center"
android:text="Please wait! This may take a moment." />
<ProgressBar
android:layout_width="match_parent"
android:id="@+id/progressbarPredict"
android:layout_height="wrap_content"
android:layout_weight="1"
style="?android:attr/progressBarStyleHorizontal"/>
Show Percentage Progress Bar with Data Bars Then, select Conditional Formatting >> Data Bars from the Home tab.
Progress bars are used to show progress of a task. For example, when you are uploading or downloading something from the internet, it is better to show the progress of download/upload to the user. In android there is a class called ProgressDialog that allows you to create progress bar.
ProgressDialog class to show the progress bar. Android ProgressDialog is the subclass of AlertDialog class. The ProgressDialog class provides methods to work on progress bar like setProgress(), setMessage(), setProgressStyle(), setMax(), show() etc. The progress range of Progress Dialog is 0 to 10000.
You can update the percentage of progress displayed by using the setProgress(int) method, or by calling incrementProgressBy(int) to increase the current progress completed by a specified amount. By default, the progress bar is full when the progress value reaches 100.
Following is the code to create a progress dialog with percentage like in the picture.
int status = 0;
Handler handler = new Handler();
public void showDialog(Activity activity, String msg) {
final Dialog dialog = new Dialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(false);
dialog.setContentView(R.layout.dialog);
final ProgressBar text = (ProgressBar) dialog.findViewById(R.id.progress_horizontal);
final TextView text2 = dialog.findViewById(R.id.value123);
new Thread(new Runnable() {
@Override
public void run() {
while (status < 100) {
status += 1;
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
text.setProgress(status);
text2.setText(String.valueOf(status));
if (status == 100) {
dialog.dismiss();
}
}
});
}
}
}).start();
dialog.show();
Window window = dialog.getWindow();
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
}
Layout File : dialog
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical">
<ProgressBar
android:id="@+id/progress_horizontal"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp" />
<RelativeLayout
android:layout_width="wrap_content"
android:paddingLeft="20dp"
android:layout_margin="16dp"
android:layout_height="wrap_content">
<TextView
android:id="@+id/value123"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/value123"
android:text="%" />
</RelativeLayout>
Result :
With Asyntask :
int status = 0;
Handler handler = new Handler();
Dialog dialog;
ProgressBar text;
TextView text2;
public void showDialog(Activity activity, String msg) {
dialog = new Dialog(activity);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(false);
dialog.setContentView(R.layout.dialog);
text = (ProgressBar) dialog.findViewById(R.id.progress_horizontal);
text2 = dialog.findViewById(R.id.value123);
dialog.show();
Window window = dialog.getWindow();
window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT);
new Thread(new Runnable() {
@Override
public void run() {
while (status < 100) {
status += 1;
try {
Thread.sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.post(new Runnable() {
@Override
public void run() {
text.setProgress(status);
text2.setText(String.valueOf(status));
if (status == 100) {
status = 0;
}
}
});
}
}
}).start();
}
private class AsyncTaskRunner extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
// it will fill the progress bar to 100
// and will refill again and again
/*
*
* Make your api call here
* MAke request to API and return data when response comes
*
*
* */
/*
*
* I have just add sleep to thead for example purposes
*
* */
try {
Thread.sleep(30 * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return resp;
}
@Override
protected void onPostExecute(String result) {
/*
*
*
* Do your processing there on the api result
*
*
* */
dialog.dismiss();
}
@Override
protected void onPreExecute() {
showDialog(MainActivity.this,"");
}
@Override
protected void onProgressUpdate(String... text) {
}
}
For start the Asyntask :
new AsyncTaskRunner().execute("fs");
I am not sure if this is the best approach
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With