Saturday, 31 August 2013

Acitvity LifeCycle of Android Application


This tutorial explains how android activity lifecycle works. Activity is a window that contains the user interface of your application.


To create an activity your class need to extends Activty base class.An Application has more than on activity . Activity base class contains events that governs the life cycle of an activity.

  • onCreate () : Called when the activity is first created.
  • onStart(): Called when the activity become visible to the user.
  • onResume(): Called when the activity start interacting with the user.
  • onPause(): Called when the current activity is being paused and the previous activity is being resumed.
  • onStop(): Called when the activity is no longer visible to the user.
  • onDestroy(): Called before the activity is destroyed by the system.
  • onRestart(): Called when the activity has been stoped and is restarting again.



Step 1:
Create a project with the following details:
ProjectName      :            LifeCycle
PackageName    :            sat.tuts4mobile.lifecycle
ActivityName        :                LifeCycleActivity  

Step 2:
In the LifeCycleActivity.java file , add the following code:

package sat.tuts4mobile.lifecycle;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.Toast;

public class LifeCycleActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        Toast.makeText(LifeCycleActivity.this,"ON CREATE", Toast.LENGTH_SHORT).show();
       
    }
   
    @Override
    protected void onStart() {
       // TODO Auto-generated method stub
       super.onStart();
      
        Toast.makeText(LifeCycleActivity.this,"ON START", Toast.LENGTH_SHORT).show();
    }
   
    @Override
    protected void onResume() {
       // TODO Auto-generated method stub
       super.onResume();
   
        Toast.makeText(LifeCycleActivity.this,"ON RESUME", Toast.LENGTH_SHORT).show();

    }
   
    @Override
    protected void onPause() {
       // TODO Auto-generated method stub
       super.onPause();
   
        Toast.makeText(LifeCycleActivity.this,"ON PAUSE", Toast.LENGTH_SHORT).show();

    }
   
    @Override
    protected void onRestart() {
       // TODO Auto-generated method stub
       super.onRestart();
      
        Toast.makeText(LifeCycleActivity.this,"ON RESTART", Toast.LENGTH_SHORT).show();

    }
   
    @Override
    protected void onStop() {
       // TODO Auto-generated method stub
       super.onStop();
      
        Toast.makeText(LifeCycleActivity.this,"ON STOP", Toast.LENGTH_SHORT).show();

    }
   
    @Override
    protected void onDestroy() {
       // TODO Auto-generated method stub
       super.onDestroy();
      
        Toast.makeText(LifeCycleActivity.this,"ON DESTROY", Toast.LENGTH_SHORT).show();

    }
   
}


Step 3:
When you run the following code , you see when the application starts there are three toast messages comes after one another.
First is ON CREATE , second is ON START and third is ON RESUME.

When you press the home button from the emulator , ON PAUSE and ON STOP methods call.

And when you opens the application again ON RESTART , ON START and ON RESUME methods call.

And in last when you press the back button from emulator , ON PAUSE , ON STOP and ON DESTROY method calls

Click here to download source code of application.

Monday, 26 August 2013

How to use SharedPreference to store information in key-value pair in Android.


This tutorial explains how to store small amount of information using SharedPreferences APIs, and how to retrieve their values.


Here we take an example of login form. When user enter their login credentials, and checked the checkbox (i.e. Remember), the credentials store in the application, and when user opens that application again, user not need to enter their login information again. To store information we write:


SharedPreferences preferences = getSharedPreferences(PREFS_NAME,
Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("username", username.getText().toString());
editor.putString("password", password.getText().toString());
editor.putString("logged", "logged");
editor.commit();

Here we set Context.MODE_PRIVATE, so the file is accessible by only your application.

If you want to reset your preferences .

SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.commit();


Saturday, 8 December 2012

Android ListView with image and text (using BaseAdapter)

This tutorial is about creating a ListView which contains image and text as listitem .Here we create a custom listview item  by extend BaseAdapter class.

Following are the steps  to create a project.

Step 1:
Create a project with the following details:
ProjectName     :               CustomListView
PackageName    :               sat.tuts4mobile.customlistview
ActivityName     :               ListViewActivity  

Step 2:
Paste the following code in main.xml .
This is a main xml layout file which contains a listview.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

              <ListView
                android:id="@+id/listView1"
                android:layout_width="fill_parent"
                android:layout_height="match_parent" >
            </ListView>
      
       </LinearLayout>

Step 3:
Create a new xml file name listlayout.xml which is used for create a listitem layout .
Paste this code in this file:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
      
       <LinearLayout
        android:id="@+id/ll"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="2dip"
        android:background="#336699" >

        <ImageView
            android:id="@+id/imageView1"
            android:layout_width="50dip"
            android:layout_height="50dip"
            android:src="@drawable/ic_launcher" />
             
              <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="5dip"
            android:layout_marginTop="8dip"
            android:text="Medium Text"
            android:textAppearance="?android:attr/textAppearanceMedium" />

    </LinearLayout>

</LinearLayout>

Step 4:
Create a new class name ListItemDetails which is used as a setter or getter .
Paste this code in this file:

package sat.tuts4mobile.customlistview;
public class ListItemDetails {
      
       private String name;
       private int image;
      
       public String getName()
              {
              return name;
              }
       public void setName(String name)
              {
              this.name = name;
              }
       public int getImage()
              {
              return image;
              }
       public void setImage(int image)
              {
              this.image = image;
              }
}

Step 5:
Create a new class name CustomListAdapter extends BaseAdapter to bind data to listview item .
Paste this code in this file:

package sat.tuts4mobile.customlistview;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class CustomListAdapter extends BaseAdapter {
               
                private static ArrayList<ListItemDetails> itemDetailsrrayList;
               
                LayoutInflater layoutInflator;
                String[] countryName;
                int[] countryFlag;
                Context context;
               
public CustomListAdapter(ArrayList<ListItemDetails> result , Context c) {
                                // TODO Auto-generated constructor stub
                                itemDetailsrrayList = result;
                                context = c;
                }

                public int getCount() {
                                // TODO Auto-generated method stub
                                return itemDetailsrrayList .size();
                }

                public Object getItem(int arg0) {
                                // TODO Auto-generated method stub
                                return itemDetailsrrayList .get(arg0);
                }

                public long getItemId(int position) {
                                // TODO Auto-generated method stub
                                return position;
                }

                public View getView(int position, View convertView, ViewGroup parent) {
                                // TODO Auto-generated method stub
                               
        layoutInflator  =    
        LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);                               
        View row = layoutInflator.inflate(R.layout.listlayout, parent,false);
                               
        TextView textview = (TextView) row.findViewById(R.id.textView1);
        ImageView imageview = (ImageView) row.findViewById(R.id.imageView1);

        textview.setText(itemDetailsrrayList .get(position).getName());
        imageview.setImageResource(itemDetailsrrayList .get(position).getImage());

        return (row);
                }
 }

Step 6: 
At last paste this code in ListViewActitivty.java :

package sat.tuts4mobile.customlistview;
import java.util.ArrayList;
import android.app.Activity;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListAdapter;
import android.widget.ListView;

public class ListViewActivity extends Activity {
               
                String[] text = { "Afghanistan", "Algeria", "Australia", "Bermuda", "Bhutan", "Canada", "China","India","Japan","Kuwait", "Malaysia", "Mexico" };

                int[] image = { R.drawable.afghanistan, R.drawable.algeria, R.drawable.australia,
            R.drawable.bermuda, R.drawable.bhutan, R.drawable.canada, R.drawable.china,
            R.drawable.india, R.drawable.japan, R.drawable.kuwait, R.drawable.malaysia, R.drawable.mexico };

                ListItemDetails item_details;
                /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
        ArrayList<ListItemDetails> result = GetSearchResults();
        ListView lv = (ListView)findViewById(R.id.listView1);
        lv.setAdapter(new CustomListAdapter(result,getApplicationContext()));
       
    }
                private ArrayList<ListItemDetails> GetSearchResults() {
                                // TODO Auto-generated method stub
                                ArrayList<ListItemDetails> results = new ArrayList<ListItemDetails>();
                                 
                                for(int i=0;i<text.length;i++)
                                {
                                                item_detailsnew ListItemDetails();
                                                item_details.setName(text[i]);
                                                item_details.setImage(image[i]);
                                                results.add(item_details);
                                }
                               
                                return results;
                }
}

When you run the project it looks like :






Wednesday, 21 November 2012

Android SDK Tools, Revision 21

Along with the Android 4.2 SDK, we also launched a brand new update of the Android SDK Tools (Revision 21). The update includes new tools and capabilities that can help you work more efficiently as you create applications. Tools such as a newmulti-config editor, and new Lint rules will help you develop apps more quickly, while a new UI test framework will give you more ways automate testing and QA for your apps. For new developers, one-click SDK download and new app templates help you get started more quickly.

Multi-config editor

A new multi-configuration editor allows you to develop and prototype your UI across various orientations, screen sizes and locales. For example, while editing your layout in portrait mode, you can see if your edits aren't visible in the shorter landscape orientation. You can see previews for other screen sizes from small phones to large tablets, you can see previews for the layout using all the available language translations in your app, and so on. You can even see how the layout appears when it is included as a fragment in a different larger layout. Finally, Android allows you to create specialized layouts for any of these configurations, and the multi configuration editor shows you these overridden layouts.

Here is a screenshot of the layout editor showing one of the layouts from the Google I/O application, across a variety of screen sizes.



More app templates

Tools R21 brings three new app templates to help you to easily add new screens to your app. There’s a new full-screen activity for use as a photo or video viewer, a settings activity to handle basic user preferences and a login activity to capture username/password. 

UI Automator Test Framework

One common approach to UI testing is to run tests manually and verify that the app is behaving as expected. UI Automator is a new software testing framework available in Tools R21 that provides you with tools to easily automate UI testing tasks. It provides a GUI tool to scan and analyze the UI components of an Android application (uiautomatorviewer), a library containing APIs to create customized functional UI tests, and an execution engine to automate and run the tests against multiple physical devices.

One-click SDK installer

New Android SDK developers now have a convenient way to download all the various SDK components like Tools, Platform Tools, Eclipse ADT, and the latest system image with a single click. Existing developers can continue to manage their SDK components and get updates through the SDK Manager. 

Revamped AVD creation dialog

The new dialog makes it easier to create Android Virtual Devices (AVDs) matching real device profiles. The AVDs will also appear in the layout editor to show you how the layouts will look.



More Lint rules

And to wrap things up there are 25 new lint rules which catch several common sources of bugs, for example deviations from Android design guide for icons, checks for mismanaged wakelocks, common sources of locale-related bugs and so on. So make sure you upgrade and let Lint loose on your projects before your next app update!

To know more: 
http://android-developers.blogspot.in/2012/11/android-sdk-tools-revision-21.html