Nirmal
Nirmal

Reputation: 41

Progress Bar Between 2 activities

I am making a very simple program. I just want to show a progress bar between 1st and 2nd activity.

Activity 1 contains just a button and as soon as I click it, it should show a progress bar in the same activity and keep showing till the second activity appears which contains just a message being displayed.

Upvotes: 0

Views: 2912

Answers (5)

raaz k razi
raaz k razi

Reputation: 1

To show ProgressDialog before switching to the new activity, or just after new activity is shown, but data is still loading. You can check it... here: http://developer.android.com/reference/android/app/ProgressDialog.html

Upvotes: 0

GOLDEE
GOLDEE

Reputation: 2318

Have a look at this example this wiil clear all your concept related Progress bar and Asynctask

import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class download extends Activity {

public static final int DIALOG_DOWNLOAD_PROGRESS = 0;
private Button startBtn;
private ProgressDialog mProgressDialog;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    startBtn = (Button)findViewById(R.id.startBtn);
    startBtn.setOnClickListener(new OnClickListener(){
        public void onClick(View v) {
            startDownload();
        }
    });
}

private void startDownload() {
    String url = "http://farm1.static.flickr.com/114/298125983_0e4bf66782_b.jpg";
    new DownloadFileAsync().execute(url);
}
@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DIALOG_DOWNLOAD_PROGRESS:
        mProgressDialog = new ProgressDialog(this);
        mProgressDialog.setMessage("Downloading file..");
        mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        mProgressDialog.setCancelable(false);
        mProgressDialog.show();
        return mProgressDialog;
    default:
        return null;
    }
}

class DownloadFileAsync extends AsyncTask<String, String, String> {

@Override
protected void onPreExecute() {
    super.onPreExecute();
    showDialog(DIALOG_DOWNLOAD_PROGRESS);
}

@Override
protected String doInBackground(String... aurl) {
    int count;

try {

URL url = new URL(aurl[0]);
URLConnection conexion = url.openConnection();
conexion.connect();

int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);

InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream("/sdcard    /some_photo_from_gdansk_poland.jpg");

byte data[] = new byte[1024];

long total = 0;

    while ((count = input.read(data)) != -1) {
        total += count;
        publishProgress(""+(int)((total*100)/lenghtOfFile));
        output.write(data, 0, count);
    }

    output.flush();
    output.close();
    input.close();
} catch (Exception e) {}
return null;

}
protected void onProgressUpdate(String... progress) {
     Log.d("ANDRO_ASYNC",progress[0]);
     mProgressDialog.setProgress(Integer.parseInt(progress[0]));
}

@Override
protected void onPostExecute(String unused) {
    dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
}
}
}

Upvotes: 0

Ram kiran Pachigolla
Ram kiran Pachigolla

Reputation: 21191

ProgressBar is used whenever there is any process to take more time then we should use asynchronous task and showing progress dialog until complete the task

if you have any requirement like that then follow these

private class LongOperation extends AsyncTask<String, Void, String> 
{
    protected void onPreExecute() 
    { 
        progressDialog = new ProgressDialog(activity.this); 
        progressDialog.setTitle("Processing...");
        progressDialog.setMessage("Please wait...");
        progressDialog.setCancelable(true);
        progressDialog.show();
    }

    protected String doInBackground(String... params) 
    {
        try 
        {
            //BackGround process();
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
    protected void onPostExecute(String result) 
    {

        progressDialog.dismiss();
        Intent n = new Intent(firstactivity.this, secondactivity.class);
        startActivity(n);
    }
  }

How to call this

ProgressDialog progressDialog;
LongOperation mytask = null;
mytask = new LongOperation();
mytask.execute();

Upvotes: 1

Paresh Mayani
Paresh Mayani

Reputation: 128428

I assume you want to implement long-running background task while moving to 2nd activity. If this is the case then implement AsyncTask.

There are 4 methods of AsyncTask which you can implement, but you can do as follows:

  1. doInBackground() - implement your long running task here
  2. onPostExecute() - move to the 2nd activity

Upvotes: 0

Stephane Mathis
Stephane Mathis

Reputation: 6622

It's more efficient to call the second activity and display the progress bar from there before doing the heavy stuff. Take a look at how the class AsyncTask works.

Upvotes: 0

Related Questions