Android: Progress Dialog change ProgressDialog.setMessage() while loading
I was hoping someone could help me figure out how to change the setmessage dialog in a progress dialog with just a dummy timer that cycles through either an array of strings or any other way. For example While its loading it could say Loading... -> Building... -> Rendering... -> ect. on like a 1/2 sec timer (this is just for me play with it I can adapt it use real-time updating once I figure out how to change the dialog.) I've been using this tutorial for the progress thread minus the orientation code. Any ideas?
thanks!
It's not pretty but I was able to get it to work with this:
public class BadBaconJoke extends Activity implements OnClickListener {
ProgressDialog dialog;
int increment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.progressdialog);
Button startbtn = (Button) findViewById(R.id.startbtn);
startbtn.setOnClickListener(this);
}
public void onClick(View view) {
// get the increment value from the text box
EditText et = (EditText) findViewById(R.id.increment);
// convert the text value to a integer
increment = Integer.parseInt(et.getText().toString());
dialog = new ProgressDialog(this);
dialog.setCancelable(true);
dialog.setTitle("Loading...");
dialog.setMessage("Almsot done!");
// set the progress to be horizontal
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
// reset the bar to the default value of 0
dialog.setProgress(0);
// get the maximum value
EditText max = (EditText) findViewById(R.id.maximum);
// convert the text value to a integer
final int maximum = Integer.parseInt(max.getText().toString());
// set the maximum value
dialog.setMax(maximum);
// display the p开发者_运维技巧rogressbar
dialog.show();
// create a thread for updating the progress bar
Thread background = new Thread (new Runnable() {
public void run() {
try {
// enter the code to be run while displaying the progressbar.
//
// This example is just going to increment the progress bar:
// So keep running until the progress value reaches maximum value
while (dialog.getProgress()<= dialog.getMax()) {
// wait 500ms between each update
Thread.sleep(500);
// active the update handler
progressHandler.sendMessage(progressHandler.obtainMessage());
}
} catch (java.lang.InterruptedException e) {
// if something fails do something smart
}
}
});
// start the background thread
background.start();
}
// handler for the background updating
Handler progressHandler = new Handler() {
public void handleMessage(Message msg) {
dialog.incrementProgressBy(increment);
int x;
x = dialog.getProgress();
switch (x) {
case 10: dialog.setMessage("Gathering Data"); break;
case 20: dialog.setMessage("Parsing Results"); break;
case 30: dialog.setMessage("Builindg Data"); break;
case 40: dialog.setMessage("TeraForming"); break;
case 50: dialog.setMessage("Contacting Server"); break;
case 60: dialog.setMessage("Ping Back"); break;
case 70: dialog.setMessage("Processing"); break;
case 80: dialog.setMessage("Communicating with Device"); break;
case 90: dialog.setMessage("Populating"); break;
case 100: dialog.setMessage("Displaying Data:"); break;
default: dialog.setMessage("..."); break;
}
if (x == 100){
new AlertDialog.Builder(BadBaconJoke.this);
dialog.setTitle("Complete");
//.setMessage("Are you sure you want to exit?")
// dialog.setButton(android.R.string.no, null);
//.setMessage("Are you sure you want to exit?")
}
}
};
}
Any ideas how to get it work with a spinner vs a process dialog? When I change dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); to dialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
it only displays the default from the switch case.
You can use onProgressUpdated()
in order to change the message, because this method is run on the UI Thread. Though, it doesn't give you the opportunity to change the message on the particular amounts of time.
精彩评论