What we will do ?
->In this tutorial we will make a button which when pressed opens a dialogbox with spinner for sometime and then open another page.
What we need ?
Step 2 : Give a Name to your Application (ProgressSpinnerdialog) and a package name(mia), then click on Next continuously then click Finish.
Step 3 : Make a button in activity_main.xml in a Linear Layout.
Code for activity_main.xml is shown below.
activity_main.xml
activity_progressbar.xml
Step 5 : Make another Android XML File and name it as activity_finalpage.xml
activity_finalpage.xml
Step 6 : Go to res->values->styles.xml and copy the code below in it.
styles.xml
Step 7 : Go to src->com.mia.progressspinnerdialog ->.MainActivity.java
MainActivity.java
Step 8 : Make a new class in src->com.mia.progressspinnerdialog and name it as DialogFrag. Copy the below code in it.
DialogFrag.java
Step 9 : Make a new class in src->com.mia.progressspinnerdialog and name it as FinalPage. Copy the below code in it.
FinalPage.java
Step 10 : Make changes in AndroidManifest.xml as shown below.
AndroidManifest.xml
Step 11 : Run the Project.
Explanation of the code :
Explanation from activity_main.xml :
Explanation from activity_finalpage.xml :
->In this tutorial we will make a button which when pressed opens a dialogbox with spinner for sometime and then open another page.
What we need ?
- An activity with a Button(activity_main.xml)
- An activity with progress bar(activity_progressbar.xml)
- An activity with result page(activity_finalpage.xml)
- styles.xml
- Java Classes to handle all three activities(MainActivity.java, DialogFrag.java, FinalPage.java)
- Some additions in AndroidMainfest.xml
Step 2 : Give a Name to your Application (ProgressSpinnerdialog) and a package name(mia), then click on Next continuously then click Finish.
Step 3 : Make a button in activity_main.xml in a Linear Layout.
Code for activity_main.xml is shown below.
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:paddingLeft="50dp" android:paddingRight="50dp" android:paddingTop="10dp" > <Button android:id="@+id/Button01" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Click to launch" > </Button> </LinearLayout>Step 4 : Make a new Android XML File in res->layout and name it as activity_progressbar.xml.
activity_progressbar.xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal" > <ProgressBar android:id="@+id/progress_bar_only" style="@style/ProgressBar.Spinner.Indeterminate.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:max="200" android:paddingBottom="1dp" android:paddingLeft="20dp" android:paddingRight="10dp" android:paddingTop="1dp" /> <TextView android:id="@+id/waiting" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:ems="10" android:paddingBottom="1dp" android:paddingLeft="20dp" android:paddingTop="1dp" android:text="waitText" android:textSize="16sp" /> </LinearLayout>
Step 5 : Make another Android XML File and name it as activity_finalpage.xml
activity_finalpage.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/RelativeLayout1" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/display_message" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:ems="10" android:paddingTop="10dp" android:text="Page Loaded" android:textSize="20sp" /> </RelativeLayout>
styles.xml
<resources> <style name="AppBaseTheme" parent="android:Theme.Light"> </style> <!-- Application theme. --> <style name="AppTheme" parent="AppBaseTheme"> <!-- All customizations that are NOT specific to a particular API-level can go here. --> </style> <style name="ProgressBar.Spinner.Indeterminate.Small" parent="@android:style/Widget.Holo.Light.ProgressBar.Small"> <item name="android:layout_width">wrap_content</item> <item name="android:layout_height">wrap_content</item> <item name="android:indeterminate">true</item> </style> </resources>
Step 7 : Go to src->com.mia.progressspinnerdialog ->.MainActivity.java
MainActivity.java
package com.mia.progressspinnerdialog;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.ProgressBar;
import android.view.View;
import android.view.View.OnClickListener;
public class MainActivity extends Activity {
int typeBar;
ProgressBar progDialog;
Button button1;
DialogFrag fragment;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button) findViewById(R.id.Button01);
button1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
typeBar = 0;
DialogFrag.context = getApplicationContext();
fragment = DialogFrag.newInstance(typeBar);
fragment.show(getFragmentManager(), "Task 1");
}
});
}
}
Step 8 : Make a new class in src->com.mia.progressspinnerdialog and name it as DialogFrag. Copy the below code in it.
DialogFrag.java
package com.mia.progressspinnerdialog;
import android.app.DialogFragment;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.content.Context;
import android.content.Intent;
public class DialogFrag extends DialogFragment {
ProgressDialog progDialog;
ProgressBar pbar;
public static Context context;
int barType;
View v;
private ProgressThread progThread;
private static final int delay = 20;
private int maxBarValue;
boolean threadStopped = false;
boolean lightTheme = true;
public DialogFrag() {
}
static DialogFrag newInstance(int num) {
DialogFrag f = new DialogFrag();
Bundle args = new Bundle();
args.putInt("num", num);
f.setArguments(args);
return f;
}
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
barType = getArguments().getInt("num");
int style = DialogFragment.STYLE_NO_TITLE;
int theme = android.R.style.Theme_Holo_Dialog;
if(lightTheme){
theme = android.R.style.Theme_Holo_Light_Dialog;
}
this.setStyle(style, theme);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if(barType == 0){
v = inflater.inflate(R.layout.activity_progressbar, container, false);
pbar = (ProgressBar) v.findViewById(R.id.progress_bar_only);
}
maxBarValue = pbar.getMax();
progThread = new ProgressThread(handler);
progThread.start();
return v;
}
@Override
public void onDestroy(){
super.onDestroy();
}
private void closeDialog(){
if(!threadStopped){
Intent i = new Intent(context, FinalPage.class);
startActivity(i);
if(!this.isDetached()) dismiss();
}
}
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
int total = msg.getData().getInt("total");
pbar.setProgress(total);
if (total > maxBarValue){
progThread.setState(ProgressThread.DONE);
pbar.setVisibility(ProgressBar.INVISIBLE);
v.setVisibility(View.INVISIBLE);
closeDialog();
threadStopped = true;
}
}
};
private class ProgressThread extends Thread {
final static int DONE = 0;
final static int RUNNING = 1;
Handler mHandler;
int mState;
int total;
ProgressThread(Handler h) {
mHandler = h;
}
@Override
public void run() {
mState = RUNNING;
total = 0;
threadStopped = false;
while (mState == RUNNING) {
try {
Thread.sleep(delay);
} catch (InterruptedException e) {
Log.e("ERROR", "Thread was Interrupted");
}
Message msg = mHandler.obtainMessage();
Bundle b = new Bundle();
b.putInt("total", total);
msg.setData(b);
mHandler.sendMessage(msg);
total++;
}
}
public void setState(int state) {
mState = state;
}
}
}
Step 9 : Make a new class in src->com.mia.progressspinnerdialog and name it as FinalPage. Copy the below code in it.
FinalPage.java
package com.mia.progressspinnerdialog;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
public class FinalPage extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_finalpage);
}
}
Step 10 : Make changes in AndroidManifest.xml as shown below.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.mia.progressspinnerdialog" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="13" android:targetSdkVersion="16" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name="com.mia.progressspinnerdialog.MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".DialogFrag" android:label="DialogFragment" > </activity> <activity android:name=".FinalPage" android:label="FinalPage" > </activity> </application> </manifest>
Step 11 : Run the Project.
Explanation of the code :
Explanation from activity_main.xml :
- We have a button with id Button01 in a Linear Layout.
- We have a ProgressBar with a TextView in a Linear Layout.The style of progress bar is defined from styles.xml.
- android:max defines the maximum value for the progress.
<ProgressBar android:id="@+id/progress_bar_only" style="@style/ProgressBar.Spinner.Indeterminate.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_weight="1" android:max="200" android:paddingBottom="1dp" android:paddingLeft="20dp" android:paddingRight="10dp" android:paddingTop="1dp" />
- We have a Text displayed on a simple Relative Layout.
- We define an integer variable named typeBar, a ProgressBar variable progDialog, a Button and a Dialog Fragment.
int typeBar; ProgressBar progDialog; Button button1; DialogFrag fragment;
- We use onClick() method to perform action when button is pressed. We define typeBar to value 0 to denote a spinner.
button1.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
typeBar = 0;
- getApplicationContext() method is used to hold the specific action of the Dialog Fragment.
DialogFrag.context = getApplicationContext();
- Then we create a new instance of Fragment using newInstance(). We use this instance to interact with the fragment (our dialogbox with spinner and text) using getFragmentManager() method. Task 1 is the tag for the fragment.
fragment = DialogFrag.newInstance(typeBar); fragment.show(getFragmentManager(), "Task 1");
Explanation from DialogFrag.java :
- Create a new instance of class DialogFrag.
static DialogFrag newInstance(int num) {
DialogFrag f = new DialogFrag();
Bundle args = new Bundle();args.putInt("num", num);
f.setArguments(args);
return f;
}
- Define theme for the dialog-box
int style = DialogFragment.STYLE_NO_TITLE;
int theme = android.R.style.Theme_Holo_Dialog;
if(lightTheme){
theme = android.R.style.Theme_Holo_Light_Dialog;
}
this.setStyle(style, theme);
- Connect pbar variable to progressbar (progress_bar_only) from the layout.
pbar = (ProgressBar) v.findViewById(R.id.progress_bar_only);
- Get the maximum value of progress and store it in maxBarValue. Then make thread progThread and start it using start().
maxBarValue = pbar.getMax(); progThread = new ProgressThread(handler); progThread.start();
- Code for opening FinaPage when dialog-box closes.
private void closeDialog(){
if(!threadStopped){
Intent i = new Intent(context, FinalPage.class);
startActivity(i);
if(!this.isDetached()) dismiss();
- Handler displays the message in the dialog-box. getInt() gets integer value of text and compares it with maxBarValue. If it is higher the dialog-box will disappear.
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
int total = msg.getData().getInt("total");
pbar.setProgress(total);
if (total > maxBarValue){
progThread.setState(ProgressThread.DONE);
pbar.setVisibility(ProgressBar.INVISIBLE);
v.setVisibility(View.INVISIBLE);
closeDialog();
threadStopped = true;
- All other code is simple java thread code.
Explanation from FinalPage.java
- It opens the layout activity_finalpage when class object is called.
setContentView(R.layout.activity_finalpage);
Stay Tuned with Made In Android















No comments:
Post a Comment