<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Gurushya</title>
	<atom:link href="http://gurushya.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://gurushya.com</link>
	<description>Programming and Personal Development</description>
	<lastBuildDate>Sun, 22 Jul 2012 06:38:37 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4</generator>
		<item>
		<title>Android Popup Menus</title>
		<link>http://gurushya.com/android-popup-menus/</link>
		<comments>http://gurushya.com/android-popup-menus/#comments</comments>
		<pubDate>Sun, 15 Jul 2012 20:37:39 +0000</pubDate>
		<dc:creator>Kannan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android tutorial]]></category>

		<guid isPermaLink="false">http://gurushya.com/?p=1167</guid>
		<description><![CDATA[Popup menus in android are useful for displaying extended options associated with a specific action. For eg: ‘send’ action could have multiple extended options, like ‘send by email’ or ‘send by sms’ etc. Unlike android context menus they can be invoked by any event such a button click not just long clicks. They are associated [...]]]></description>
			<content:encoded><![CDATA[<p>Popup menus in android are useful for displaying extended options associated with a specific action. For eg: ‘send’ action could have multiple extended options, like ‘send by email’ or ‘send by sms’ etc. Unlike android context menus they can be invoked by any event such a button click not just long clicks. They are associated with the specific view that invoked it and each view in an activity can have its own popup window.</p>
<h3>Steps to create a Popup menu</h3>
<ul>
<li>Create a new instance of PopupMenu class and pass the instance of the Context ( usually the current activity) and the view (for which the pop-up menu is desired) as arguments.</li>
<li>Inflate the menu resource using:
<ul>
<li>popupMenu.inflate () if you are using Android 4.0 SDK and above (or)</li>
<li>MenuInflater class (popupMenu.getMenuInflater().inflate() method) if you are using Android 3.0 SDK</li>
</ul>
</li>
<li>Call popupMenu.show() to display the menu</li>
</ul>
<h3>Responding to menu item selections</h3>
<p>Override the popupMenu.setOnMenuItemClickListener () method and provide a call back for handling user selections. The use selected menu item is passed in as argument to the callback method.</p>
<h3>Example</h3>
<p><a href="http://gurushya.com/android-popup-menus/"><img style="display: inline; margin-left: 0px; margin-right: 0px; border: 0px;" title="Android popup menu example" src="http://gurushya.com/wp-content/uploads/2012/07/image_thumb1.png" alt="Android popup menu example" width="204" height="220" align="right" border="0" /></a>Lets adapt the same example we saw for the <a href="http://gurushya.com/android-context-menus/">android context menu</a> previously to use popup menus instead. What we have here is a single button that is wrapped inside a linear layout. Clicking the button invokes a popup menu that lets us change the background color for the button as shown in the sample screenshot.</p>
<h4>Menu resource File</h4>
<p>This is the same color menu resource file under res/menu folder that we used in android context menu example.</p>
<pre class="brush: xml;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    &lt;item android:id="@+id/menu_red" android:title="Red" /&gt;
    &lt;item android:id="@+id/menu_green" android:title="Green"/&gt;
    &lt;item android:id="@+id/menu_blue" android:title="Blue"/&gt;
&lt;/menu&gt;</pre>
<h4></h4>
<h4>Layout definition file</h4>
<p>One single button within a linear layout.</p>
<pre class="brush: xml;">&lt;?xml version="1.0" encoding="utf-8"?&gt;

&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"&gt;

    &lt;Button android:id="@+id/popupMenuBtn"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:text="Show me the Popup"
            android:layout_gravity="center"
            android:gravity="center"/&gt;
&lt;/LinearLayout&gt;</pre>
<h4></h4>
<h4>Java Source Code</h4>
<p>Nothing fancy here again. We just follow the 3 steps mentioned above for creating a context menu and define the menu handler to handle user selections.</p>
<ul>
<li>The button element acts as the view responsible for invoking the popup menu. Create a new instance of the popup menu and pass the activity and the button as arguments</li>
<li>Inflate the menu resource and associate it with the popup menu instance.</li>
<li>Call popupmenu.show () method within the onClick listener to display the menu when the user clicks the button.</li>
<li>Override the popupMenu.setOnMenuItemClickListener () method to change the background color of the button based on user selections.</li>
</ul>
<pre class="brush: java;">public class MenuDemo extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.menudemo);
        /**
         * A Button that acts as the view element for the popup menu.
         */
        final Button btn = (Button) findViewById(R.id.popupMenuBtn);
        /**
         * Step 1: Create a new instance of popup menu
         */
        final PopupMenu popupMenu = new PopupMenu(this, btn);
        /**
         * Step 2: Inflate the menu resource. Here the menu resource is
         * defined in the res/menu project folder
         */
        popupMenu.inflate(R.menu.color_menu);
        /**
         * Step 3: Call show() method on the popup menu to display the
         * menu when the button is clicked.
         */
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                popupMenu.show();
            }
        });
        /**
         *  Handle menu item clicks
         */
        popupMenu.setOnMenuItemClickListener(
                new PopupMenu.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.menu_red:
                        btn.setBackgroundResource(R.color.LightRed);
                        break;
                    case R.id.menu_blue:
                        btn.setBackgroundResource(R.color.DullBlue);
                        break;
                    case R.id.menu_green:
                        btn.setBackgroundResource(R.color.LightGreen);
                        break;
                }
                return true;
            }
        });

    }
}</pre>
<p>&nbsp;</p>
<p>Happy Coding !!!</p>
]]></content:encoded>
			<wfw:commentRss>http://gurushya.com/android-popup-menus/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android Context Menus</title>
		<link>http://gurushya.com/android-context-menus/</link>
		<comments>http://gurushya.com/android-context-menus/#comments</comments>
		<pubDate>Sun, 24 Jun 2012 18:18:28 +0000</pubDate>
		<dc:creator>Kannan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android tutorial]]></category>

		<guid isPermaLink="false">http://gurushya.com/?p=980</guid>
		<description><![CDATA[Context menus are invoked in android when user performs a long click ( click and hold). While the Options menu is associated with a specific activity, context menus are associated with specific views within the activity. Thus an activity can have only one options menu but many context menus. Context Menu Creation To create a [...]]]></description>
			<content:encoded><![CDATA[<p>Context menus are invoked in android when user performs a long click ( click and hold). While the <a href="http://gurushya.com/android-menus-part-1/">Options menu</a> is associated with a specific activity, context menus are associated with specific views within the activity. Thus an activity can have only one options menu but many context menus.</p>
<h3>Context Menu Creation</h3>
<p>To create a context menu, you need to:</p>
<ul>
<li>Register the view element to use a Context menu using the <em>registerForContextMenu (View v)</em></li>
<li>Override the <em>onCreateContextMenu ()</em>method.  The method takes 3 arguments:
<ul>
<li>A default ContextMenu object,</li>
<li>The view element for which the context menu is desired and</li>
<li>A ContextMenuInfo object that can be used to pass any additional information that can used for  creation of the Context Menu.</li>
</ul>
</li>
</ul>
<h3>Responding to Context menu Selections</h3>
<p>To respond to context menus override the <em>onContextItemSelected ()</em>  method . The menu item that was selected is passed in as a argument to this method.</p>
<h3>Example</h3>
<p>Lets look at the context menu usage with a simple example.  In this example we have an activity with two TextView elements,  one with the context menu and the other without. The context menu lets us choose the background color of the TextView element as shown in the  sample screenshot below.</p>
<h5 align="left"><a href="http://gurushya.com/wp-content/uploads/2012/06/2012-06-24_09h07_27.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; float: right; padding-top: 0px; border-width: 0px;" title="Android Context Menu Demo" src="http://gurushya.com/wp-content/uploads/2012/06/2012-06-24_09h07_27_thumb.jpg" alt="Android Context Menu Demo" width="188" height="244" align="right" border="0" /></a></h5>
<h4 align="left">Context Menu Definition</h4>
<p>Menus are also resources in android. To define a menu create a file called “color_menu.xml” and place it under <em>res/menu</em> folder.  As shown below, you define the menu inside the <em>menu</em> tag and populate the menu items using the  <em>item</em> tag. You need to specify a valid id for each menu item. This is used to respond to menu item selections as shown later below.</p>
<pre class="brush: xml; ruler: false;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;menu xmlns:android="http://schemas.android.com/apk/res/android"&gt;
    &lt;item android:id="@+id/menu_red" android:title="Red" /&gt;
    &lt;item android:id="@+id/menu_green" android:title="Green"/&gt;
    &lt;item android:id="@+id/menu_blue" android:title="Blue"/&gt;
&lt;/menu&gt;</pre>
<h4>Activity Layout Definition</h4>
<p>The activity layout is simple and consists of a linear layout with two TextView elements within it as shown.</p>
<pre class="brush: xml; ruler: false;">&lt;?xml version="1.0" encoding="utf-8"?&gt;
&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent"&gt;

    &lt;TextView android:id="@+id/context_color"
              android:layout_height="wrap_content"
              android:layout_width="fill_parent"
              android:gravity="center"
              android:layout_margin="5dip"
              android:textColor="@color/DarkGrey"
              android:text="Color Context Menu ( Click and Hold)"
            /&gt;

    &lt;TextView android:id="@+id/menuDemoDiv1"
                 android:layout_height="1dip"
                 android:layout_width="match_parent"
                 android:background="@color/white"
                 android:textColor="@color/DarkGrey"
                 android:text=""/&gt;

    &lt;TextView android:id="@+id/menu_textView2"
                  android:layout_height="wrap_content"
                  android:layout_width="fill_parent"
                  android:gravity="center"
                  android:layout_margin="5dip"
                  android:textColor="@color/DarkGrey"
                  android:text="TextView with no context Menu"
                /&gt;
&lt;/LinearLayout&gt;</pre>
<p>&nbsp;</p>
<h4>Java Source Code</h4>
<ul>
<li>Register the first TextView element to use the ContextMenu within the <em>onCreate</em>() method of the activity</li>
<li>Override the onCreateContextMenu() method to create the context menu. The general pattern is to use the id of the view element to generate different menus.  In this case we delegate the menu creation to a private helper method. This method uses the <em>MenuInflater</em> instance available to the activity to inflate the color menu defined as a xml resource. Just as with layout files, android automatically generate unique ids for the menu resources based on the name of the file which is then passed into the <em>getMenuInflater (). inflate ()</em>method.</li>
<li>You can respond to the menu selections by switching on the id of  the MenuItem being passed as argument to the onContextItemSelected () method. In this case we change the background color of the TextView element based on the selection.</li>
</ul>
<pre class="brush: java;">public class MenuDemo extends Activity {
   private TextView m_contextColor;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.menudemo);
      m_contextColor = (TextView) findViewById(R.id.context_color);
      /**
       * Register the View elements in the activity to generate
       * Context menus
       */
      registerForContextMenu(m_contextColor);
   }
    @Override
    public void onCreateContextMenu(ContextMenu menu, View v, 
                            ContextMenu.ContextMenuInfo menuInfo) {
       switch (v.getId()) {
          case R.id.context_color:
             createMenu(R.menu.color_menu, menu, "Choose a color");
             break;
          default:
             super.onCreateContextMenu(menu, v, menuInfo);
       }
    }
   private void createMenu(int menuID, ContextMenu menu, 
                                            String title) {
      /**
       * Use a MenuInflater associated with the activity to
       * inflate the Menu layout
       */
      getMenuInflater().inflate(menuID, menu);
      menu.setHeaderTitle(title);
   }

   @Override
   public boolean onContextItemSelected(MenuItem item) {
      switch (item.getItemId()) {
         case R.id.menu_red:
            m_contextColor.setBackgroundResource(R.color.LightRed);
            return true;
         case R.id.menu_blue:
            m_contextColor.setBackgroundResource(R.color.DullBlue);
            return true;
         case R.id.menu_green:
            m_contextColor.setBackgroundResource(R.color.LightGreen);
            return true;
         default:
            return super.onContextItemSelected(item);
      }
   }
}</pre>
<p>&nbsp;</p>
<p>Happy Coding !!!</p>
]]></content:encoded>
			<wfw:commentRss>http://gurushya.com/android-context-menus/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android Menus Part 1</title>
		<link>http://gurushya.com/android-menus-part-1/</link>
		<comments>http://gurushya.com/android-menus-part-1/#comments</comments>
		<pubDate>Sun, 13 May 2012 16:49:58 +0000</pubDate>
		<dc:creator>Kannan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android tutorial]]></category>

		<guid isPermaLink="false">http://kannanchandrasekaran.com/?p=959</guid>
		<description><![CDATA[Every activity in android is associated with a menu. Menus in turn contain menu items and other sub menus. As of android 4.0 ( icecream sandwich), following are the  types of menus available to the developer. Options menu:  Options menu show up when the user clicks on the menu button present in the android devices [...]]]></description>
			<content:encoded><![CDATA[<p>Every activity in android is associated with a menu. Menus in turn contain menu items and other sub menus. As of android 4.0 ( icecream sandwich), following are the  types of menus available to the developer.</p>
<ul>
<li>Options menu:  Options menu show up when the user clicks on the menu button present in the android devices and are useful for showing global options that affect the entire application.</li>
<li>Context menu: Context menus are  the equivalent of right-click menus in desktop programs. You can invoke them with a long click ( touch and hold). They are useful for providing options that are specific to a UI element in the activity.</li>
<li>Popup menu: Pop-up menus can be invoked as a result of any UI event such as a button click. Android documentation recommends the use of pop-up menus to only display secondary or extended actions and handle the primary contextual actions in the context menu.</li>
</ul>
<p>In this post lets focus on the options menu  creation, modification and handling of menu item selections. . We&#8217;ll cover the other menu types and their usage in subsequent posts.</p>
<h3>Creating a menu</h3>
<p>A android menu is composed of menu items and  each menu item has the following four attributes viz.</p>
<ul>
<li>title: a title string or a string resource id</li>
<li>id: a integer that uniquely identifies the menu item</li>
<li>group id: integer that can be used for manipulating a set of menu items as a single group. eg: disabling all the menu items in a group using the group id</li>
<li>sort order: integer used for categorizing the menu items as secondary , system  etc. and determine the relative ordering of the menu items within the menu.
<p><div id="attachment_961" class="wp-caption alignright" style="width: 310px"><a href="http://kannanchandrasekaran.com/wp-content/uploads/2012/05/android-menu-constants.jpg"><img class="size-medium wp-image-961" title="android menu constants" src="http://kannanchandrasekaran.com/wp-content/uploads/2012/05/android-menu-constants-300x143.jpg" alt="menu constans available in android" width="300" height="143" /></a><p class="wp-caption-text">Android menu constants</p></div></li>
</ul>
<p>To create the<em> options menu,</em> you override the <strong>onCreateOptionsMenu (Menu menu)</strong> method. This method takes in a menu object associated with the activity as a parameter. You can then call the add() method that takes in a combination of the four attributes mentioned above as parameters to add the desired set of menu items to the menu. At the very least you need to specify the title of the menu item and let android fill in  the default values for the remaining attributes. Android also provides certain menu constants such as Menu.FIRST and Menu.NONE that can be used to generate group and menu ids. Make sure that you <em>return true</em> at the end of this method, otherwise android wont show the menu on the screen.</p>
<div id="wpshdo_1" class="wp-synhighlighter-outer"><div id="wpshdt_1" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#create method android options menu"></a><a id="wpshat_1" class="wp-synhighlighter-title" href="#create method android options menu"  onClick="javascript:wpsh_toggleBlock(1)" title="Click to show/hide code block">Create method for android options menu</a></td><td align="right"><a href="#create method android options menu" onClick="javascript:wpsh_code(1)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#create method android options menu" onClick="javascript:wpsh_print(1)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_1" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;">@<span class="kw21">Override</span>
<span class="kw2">public</span> <span class="kw3">boolean</span> onCreateOptionsMenu<span class="br0">&#40;</span><span class="kw6">Menu</span> menu<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    menu.<span class="me1">add</span><span class="br0">&#40;</span>
            <span class="kw6">Menu</span>.<span class="me1">NONE</span>, <span class="co1">// Group ID</span>
            <span class="kw6">Menu</span>.<span class="me1">FIRST</span> + <span class="nu0">1</span>, <span class="co1">// ItemId</span>
            <span class="kw6">Menu</span>.<span class="me1">NONE</span>,  <span class="co1">// ordering</span>
            <span class="st0">&quot;Option &quot;</span> + rand.<span class="me1">nextInt</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="co1">// title</span>
    <span class="kw2">return</span> <span class="kw4">true</span><span class="sy0">;</span> <span class="co1">// to make the menu visible</span>
<span class="br0">&#125;</span></pre></div></div>
<h3>Responding to menu item selection</h3>
<p>Once the menu is created, you can invoke the menu by clicking the main menu button on the android device. You can respond to specific menu item selections by overriding the <strong>onOptionsItemSelected (MenuItem menuItem)</strong> method. Android passes the reference to the menu item that was selected by the user as parameter. You can then use this reference to take the desired action on the menu item. Here we display a Toast Message with the menu item&#8217;s title and Id.</p>
<div id="wpshdo_2" class="wp-synhighlighter-outer"><div id="wpshdt_2" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Responding to option menu selection"></a><a id="wpshat_2" class="wp-synhighlighter-title" href="#Responding to option menu selection"  onClick="javascript:wpsh_toggleBlock(2)" title="Click to show/hide code block">Responding to option menu selection</a></td><td align="right"><a href="#Responding to option menu selection" onClick="javascript:wpsh_code(2)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Responding to option menu selection" onClick="javascript:wpsh_print(2)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_2" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;">@<span class="kw21">Override</span>
<span class="kw2">public</span> <span class="kw3">boolean</span> onOptionsItemSelected<span class="br0">&#40;</span><span class="kw6">MenuItem</span> item<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw21">String</span> text = item.<span class="me1">getTitle</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&quot;:&quot;</span> + item.<span class="me1">getItemId</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    Toast.<span class="me1">makeText</span><span class="br0">&#40;</span><span class="kw2">this</span>, text, Toast.<span class="me1">LENGTH_LONG</span><span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw2">return</span> <span class="kw4">true</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>
<h3>Modifying  Options menu at runtime</h3>
<p>As of android 3.0, onCreateOptionsMenu () method is called once when the activity is created. Prior to that it was called on the first invocation of the options menu. The change is due to the addition of the <em>action bar</em> to the android 3.0 SDK.  Action bars are the recommended way to handle options for applications developed using 3.0 api and higher. We&#8217;ll cover them in a separate post.</p>
<p>What this means is, you cannot add or remove the items from the menu after its created in the onCreateOptionsMenu() method. If you do need to change the contents of the menu dynamically then you &#8216;ll have to override the  <strong>onPrepareOptionsMenu (Menu menu)</strong> method. This method gets called each time the menu button is pressed and the current menu object associated with the activity is passed in as a parameter.  You can then modify the menu items inside the method. For example, we can add a new menu item each time the menu button is click as shown below.  You can also force android to call the onCreateOptionsMenu () method again by calling the <strong>invalidateOptionsMenu ()</strong>. This is useful say, when you want to reset the menu back to original state as defined in the onCreateOptionsMenu() method.</p>
<div id="wpshdo_3" class="wp-synhighlighter-outer"><div id="wpshdt_3" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Modifying android options menu at runtime"></a><a id="wpshat_3" class="wp-synhighlighter-title" href="#Modifying android options menu at runtime"  onClick="javascript:wpsh_toggleBlock(3)" title="Click to show/hide code block">Modifying android options menu at runtime</a></td><td align="right"><a href="#Modifying android options menu at runtime" onClick="javascript:wpsh_code(3)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Modifying android options menu at runtime" onClick="javascript:wpsh_print(3)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_3" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;">@<span class="kw21">Override</span>
<span class="kw2">public</span> <span class="kw3">boolean</span> onPrepareOptionsMenu<span class="br0">&#40;</span><span class="kw6">Menu</span> menu<span class="br0">&#41;</span> <span class="br0">&#123;</span>
    <span class="kw3">int</span> size = menu.<span class="me1">size</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw6">MenuItem</span> lastItem = menu.<span class="me1">getItem</span><span class="br0">&#40;</span>size - 1<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw3">int</span> itemId = lastItem.<span class="me1">getItemId</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="nu0">1</span><span class="sy0">;</span>
    menu.<span class="me1">add</span><span class="br0">&#40;</span>lastItem.<span class="me1">getGroupId</span><span class="br0">&#40;</span><span class="br0">&#41;</span>,itemId,lastItem.<span class="me1">getOrder</span><span class="br0">&#40;</span><span class="br0">&#41;</span>,<span class="st0">&quot;option &quot;</span>+ itemId<span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="kw2">return</span> <span class="kw2">super</span>.<span class="me1">onPrepareOptionsMenu</span><span class="br0">&#40;</span>menu<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div>
<p>Happy Coding !!!</p>
]]></content:encoded>
			<wfw:commentRss>http://gurushya.com/android-menus-part-1/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Android Gallery</title>
		<link>http://gurushya.com/android-gallery/</link>
		<comments>http://gurushya.com/android-gallery/#comments</comments>
		<pubDate>Fri, 06 Apr 2012 15:21:28 +0000</pubDate>
		<dc:creator>Kannan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android tutorial]]></category>
		<category><![CDATA[android_widgets]]></category>

		<guid isPermaLink="false">http://kannanchandrasekaran.com/?p=871</guid>
		<description><![CDATA[Along with ListViews and Spinners, android also provides a Gallery widget that are useful for displaying a list of elements. Unlike the other two where elements are displayed vertically, Gallery lets you scroll through the elements horizontally.   You specify the items to be displayed in the gallery through an adapter and can register callbacks [...]]]></description>
			<content:encoded><![CDATA[<div>Along with ListViews and Spinners, android also provides a Gallery widget that are useful for displaying a list of elements. Unlike the other two where elements are displayed vertically, Gallery lets you scroll through the elements horizontally.   You specify the items to be displayed in the gallery through an adapter and can register callbacks using the setOnItemClickListener () method.</p>
<div id="attachment_887" class="wp-caption alignright" style="width: 176px"><a href="http://kannanchandrasekaran.com/wp-content/uploads/2012/04/gallery_demo.jpg"><img class="size-medium wp-image-887 " title="android gallery demo" src="http://kannanchandrasekaran.com/wp-content/uploads/2012/04/gallery_demo-208x300.jpg" alt="android gallery widget demo" width="166" height="240" /></a><p class="wp-caption-text">Android Gallery Demo</p></div>
</div>
<h3>Example</h3>
<div>As a typical example, we will use the gallery widget to show a gallery of photos. We start with a simple Gallery element within the LinearLayout as shown below. In addition to the layout width and height,  we also specify the spacing between the items displayed and the position of the elements within the Gallery using the android:spacing and android:gravity respectively.</div>
<div><div id="wpshdo_4" class="wp-synhighlighter-outer"><div id="wpshdt_4" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#XML layout for android gallery demo"></a><a id="wpshat_4" class="wp-synhighlighter-title" href="#XML layout for android gallery demo"  onClick="javascript:wpsh_toggleBlock(4)" title="Click to show/hide code block">XML layout for android gallery demo</a></td><td align="right"><a href="#XML layout for android gallery demo" onClick="javascript:wpsh_code(4)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#XML layout for android gallery demo" onClick="javascript:wpsh_print(4)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_4" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_width</span>=<span class="st0">&quot;fill_parent&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_height</span>=<span class="st0">&quot;fill_parent&quot;</span><span class="re2">&gt;</span></span>
<span class="sc3"><span class="re1">&lt;Gallery</span> <span class="re0">android:id</span>=<span class="st0">&quot;@+id/gallery&quot;</span></span>
<span class="sc3">          <span class="re0">android:spacing</span>=<span class="st0">&quot;10dip&quot;</span></span>
<span class="sc3">          <span class="re0">android:gravity</span>=<span class="st0">&quot;center&quot;</span></span>
<span class="sc3">          <span class="re0">android:layout_width</span>=<span class="st0">&quot;match_parent&quot;</span></span>
<span class="sc3">          <span class="re0">android:layout_height</span>=<span class="st0">&quot;match_parent&quot;</span></span>
<span class="sc3">         <span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></pre></div></div></p>
</div>
<h4>Custom Adapter Class</h4>
<div>The items to be displayed are images that are placed with the resources/drawable-hdpi directory. We create a custom  adapter class that reads these image resources and constructs an image view for each one of them.  The CustomAdapter class is shown below.</div>
<div><div id="wpshdo_5" class="wp-synhighlighter-outer"><div id="wpshdt_5" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Custom Adapter class for Displaying Images"></a><a id="wpshat_5" class="wp-synhighlighter-title" href="#Custom Adapter class for Displaying Images"  onClick="javascript:wpsh_toggleBlock(5)" title="Click to show/hide code block">Custom Adapter class for Displaying Images</a></td><td align="right"><a href="#Custom Adapter class for Displaying Images" onClick="javascript:wpsh_code(5)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Custom Adapter class for Displaying Images" onClick="javascript:wpsh_print(5)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_5" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">private</span> <span class="kw2">class</span> CustomAdapter <span class="kw2">extends</span> BaseAdapter <span class="br0">&#123;</span>
   <span class="kw2">private</span> <span class="kw166">Context</span> m_context<span class="sy0">;</span>
   <span class="co3">/**</span>
<span class="co3">&nbsp;   * An array of input resource ids</span>
<span class="co3">&nbsp;   */</span>
<span class="xtra ln-xtra">   <span class="kw2">private</span> <span class="kw2">final</span> <span class="kw21">Integer</span><span class="br0">&#91;</span><span class="br0">&#93;</span> m_imgs = <span class="br0">&#123;</span></span><span class="xtra ln-xtra">           R.<span class="me1">drawable</span>.<span class="me1">autumn</span>,</span><span class="xtra ln-xtra">           R.<span class="me1">drawable</span>.<span class="me1">creek</span>,</span><span class="xtra ln-xtra">           R.<span class="me1">drawable</span>.<span class="me1">desert</span></span><span class="xtra ln-xtra">   <span class="br0">&#125;</span><span class="sy0">;</span></span>   <span class="kw2">public</span> CustomAdapter<span class="br0">&#40;</span><span class="kw166">Context</span> context<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      m_context = context<span class="sy0">;</span>
   <span class="br0">&#125;</span>
   @<span class="kw21">Override</span>
   <span class="kw2">public</span> <span class="kw3">int</span> getCount<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw2">return</span> m_imgs.<span class="me1">length</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
   @<span class="kw21">Override</span>
   <span class="kw2">public</span> <span class="kw166">Object</span> getItem<span class="br0">&#40;</span><span class="kw3">int</span> position<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw2">return</span> m_imgs<span class="br0">&#91;</span>position<span class="br0">&#93;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
   @<span class="kw21">Override</span>
   <span class="kw2">public</span> <span class="kw3">long</span> getItemId<span class="br0">&#40;</span><span class="kw3">int</span> position<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw2">return</span> position<span class="sy0">;</span>
   <span class="br0">&#125;</span>
   @<span class="kw21">Override</span>
<span class="xtra ln-xtra">   <span class="kw2">public</span> <span class="kw116">View</span> getView<span class="br0">&#40;</span><span class="kw3">int</span> position, <span class="kw116">View</span> convertView, ViewGroup parent<span class="br0">&#41;</span> <span class="br0">&#123;</span></span>      <span class="kw117">ImageView</span> imgView = <span class="kw2">new</span> <span class="kw117">ImageView</span><span class="br0">&#40;</span>m_context<span class="br0">&#41;</span><span class="sy0">;</span>
      imgView.<span class="me1">setImageResource</span><span class="br0">&#40;</span>m_imgs<span class="br0">&#91;</span>position<span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      imgView.<span class="me1">setScaleType</span><span class="br0">&#40;</span><span class="kw117">ImageView</span>.<span class="me1">ScaleType</span>.<span class="me1">FIT_XY</span><span class="br0">&#41;</span><span class="sy0">;</span>
      imgView.<span class="me1">setLayoutParams</span><span class="br0">&#40;</span><span class="kw2">new</span> Gallery.<span class="me1">LayoutParams</span><span class="br0">&#40;</span>200, 300<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw2">return</span> imgView<span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></p>
</div>
<div>It extends the BaseAdapter and overrides the required methods. The important method to focus here is the getView() method. We keep track of the source items using an Integer array.  Each time the getView () method gets called,</div>
<div>
<ul>
<li>we create a new ImageView element</li>
<li>use the position argument as index into the source array to fetch the resource to be displayed</li>
<li>set the resource in the ImageView using the setImageResource () method</li>
<li>specify the scale type to fit the dimensions of the imageView. There are various  scale type options provided, try playing around with these options to see their effect.</li>
<li> Finally, specify the width and height of the images using Gallery.LayoutParams () class.</li>
</ul>
</div>
<h4>Activity Class</h4>
<div>We then use the setAdapter () method to bind  the CustomAdapter class  with the Gallery element and  register a callback to raise a Toast message that displays the name of the image using the setOnItemClickListener () method. The overall activity class is as shown.</div>
<div><div id="wpshdo_6" class="wp-synhighlighter-outer"><div id="wpshdt_6" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Overall Activity class for android gallery demo"></a><a id="wpshat_6" class="wp-synhighlighter-title" href="#Overall Activity class for android gallery demo"  onClick="javascript:wpsh_toggleBlock(6)" title="Click to show/hide code block">Overall Activity class for android gallery demo</a></td><td align="right"><a href="#Overall Activity class for android gallery demo" onClick="javascript:wpsh_code(6)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Overall Activity class for android gallery demo" onClick="javascript:wpsh_print(6)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_6" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">public</span> <span class="kw2">class</span> GalleryDemo <span class="kw2">extends</span> Activity <span class="br0">&#123;</span>
   @<span class="kw21">Override</span>
   <span class="kw2">protected</span> <span class="kw3">void</span> onCreate<span class="br0">&#40;</span>Bundle savedInstanceState<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw2">super</span>.<span class="me1">onCreate</span><span class="br0">&#40;</span>savedInstanceState<span class="br0">&#41;</span><span class="sy0">;</span>
      setContentView<span class="br0">&#40;</span>R.<span class="me1">layout</span>.<span class="me1">gallerydemo</span><span class="br0">&#41;</span><span class="sy0">;</span>
      Gallery gallery = <span class="br0">&#40;</span>Gallery<span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">gallery</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw2">final</span> CustomAdapter adapter = <span class="kw2">new</span> CustomAdapter<span class="br0">&#40;</span><span class="kw2">this</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="xtra ln-xtra">      gallery.<span class="me1">setAdapter</span><span class="br0">&#40;</span>adapter<span class="br0">&#41;</span><span class="sy0">;</span></span><span class="xtra ln-xtra">      gallery.<span class="me1">setOnItemClickListener</span><span class="br0">&#40;</span><span class="kw2">new</span> AdapterView.<span class="me1">OnItemClickListener</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span>         @<span class="kw21">Override</span>
         <span class="kw2">public</span> <span class="kw3">void</span> onItemClick<span class="br0">&#40;</span>AdapterView<span class="sy0">&lt;?&gt;</span> parent, <span class="kw116">View</span> view, <span class="kw3">int</span> position, <span class="kw3">long</span> id<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            <span class="kw21">String</span> name = getResources<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getString</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw21">Integer</span><span class="br0">&#41;</span> adapter.<span class="me1">getItem</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            <span class="kw3">int</span> startIndex = name.<span class="me1">lastIndexOf</span><span class="br0">&#40;</span><span class="st0">&quot;/&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
            name = name.<span class="me1">substring</span><span class="br0">&#40;</span>startIndex + 1<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="xtra ln-xtra">            Toast.<span class="me1">makeText</span><span class="br0">&#40;</span>GalleryDemo.<span class="kw2">this</span>,name,Toast.<span class="me1">LENGTH_SHORT</span><span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></span>         <span class="br0">&#125;</span>
      <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="xtra ln-xtra">    <span class="co1">// ....CustomAdapter inner class  goes here</span></span><span class="br0">&#125;</span></pre></div></div></p>
<p>Happy Coding !!!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://gurushya.com/android-gallery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Customizing Android WebView</title>
		<link>http://gurushya.com/customizing-android-webview/</link>
		<comments>http://gurushya.com/customizing-android-webview/#comments</comments>
		<pubDate>Sat, 31 Mar 2012 20:16:53 +0000</pubDate>
		<dc:creator>Kannan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android tutorial]]></category>

		<guid isPermaLink="false">http://kannanchandrasekaran.com/?p=826</guid>
		<description><![CDATA[In previous post we saw how to use the default Webview element to display html resources in your android application . Webview also offers the ability to override its default content loading behaviour, look and feel and its settings to suit your needs. Lets look at the various  customization points with examples. WebViewClient Allows you [...]]]></description>
			<content:encoded><![CDATA[<div>In previous post we saw how to use the default Webview element to <a title="Display Web Pages in your android application" href="http://gurushya.com/display-web-pages-in-your-android-application/">display html resources in your android application</a> . Webview also offers the ability to override its default content loading behaviour, look and feel and its settings to suit your needs. Lets look at the various  customization points with examples.</div>
<h3>WebViewClient</h3>
<div>Allows you to customize and filter the content to be displayed in the WebView. Provides callback methods that receive control during various bowser events like,</div>
<div>
<ul>
<li>when page has started loading and finished loading ( onPageStarted () &amp;&amp; onPagefinished () ),</li>
<li>when the user clicked on a URL ( shouldOverrideUrlLoading () ),</li>
<li>error conditions such as onTooManyRedirects () etc.</li>
</ul>
</div>
<div>You can extend the WebViewClient class to create and customize your own WebViewClient  and associate it with the WebView element using the setWebViewClient () method.</div>
<h3>WebChromeClient</h3>
<div>Allows customization of visual aspects of WebView such as</div>
<div>
<ul>
<li>Alerts and Confirm Dialogs ( onJsAlert () or onJsConfirm ),</li>
<li>progress updates  ( onProgressChanged () ) etc.</li>
</ul>
</div>
<div>You can customize by extending the WebChromeClient Class and  by calling the setWebChromeClient() method.</div>
<h3>JavaScriptInterface</h3>
<div>This essentially allows you to call your Java code from Javascript. You write a piece of logic in Java and use the addJavascriptInterface () method to bridge it with the Javascript environment along with a String identifier. You can then use this identifier in your Javascript code to call the Java code. As cool as this is, its also a security concern and it is a good idea to restrict this kind of access only for browser code ( HTML/Javascript) you trust.</div>
<div>In addition, WebView provides various settings that can be overridden such as enabling javascript ( its off by default), setting layout algorithm etc.<a href="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/webview_customization_demo.jpg"><img class="alignright size-medium wp-image-832" title="android webview customization demo" src="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/webview_customization_demo-186x300.jpg" alt="android webview customization demo" width="186" height="300" /></a></div>
<h3>Example</h3>
<div>In the previous post we used a simple html file as a local resource and loaded it into the WebView element.  Lets now extend and customize it  raise an android toast message as well as  provide the ability to reload the page as follows :</div>
<div>
<ul>
<li>Override the Javascript&#8217;s standard alert function to use Android&#8217;s <a title="Alerting the android user" href="http://gurushya.com/alerting-the-android-user/">Alert Dialog </a>in our custom WebChromeClient.</li>
<li>Create a Java class to refresh the WebView and call it from javascript code to reload the page.</li>
<li>Finally,  we keep track of the number of times the page has refreshed and the time taken for the refresh with our own WebViewClient.</li>
</ul>
</div>
<div>Lets look at each of them one by one.</div>
<h3>Custom WebChromeClient</h3>
<div>We extend the WebChromeClient and override the onJSAlert () method to use the Android&#8217;s Alert dialog.</div>
<div><div id="wpshdo_7" class="wp-synhighlighter-outer"><div id="wpshdt_7" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Custom WebChromeClient"></a><a id="wpshat_7" class="wp-synhighlighter-title" href="#Custom WebChromeClient"  onClick="javascript:wpsh_toggleBlock(7)" title="Click to show/hide code block">Custom WebChromeClient</a></td><td align="right"><a href="#Custom WebChromeClient" onClick="javascript:wpsh_code(7)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Custom WebChromeClient" onClick="javascript:wpsh_print(7)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_7" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">private</span> <span class="kw2">class</span> CustomChromeclient <span class="kw2">extends</span> WebChromeClient <span class="br0">&#123;</span>
   @<span class="kw21">Override</span>
   <span class="kw2">public</span> <span class="kw3">boolean</span> onJsAlert<span class="br0">&#40;</span>WebView view, <span class="kw21">String</span> url, <span class="kw21">String</span> message, <span class="kw2">final</span> JsResult result<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      AlertDialog dialog = <span class="kw2">new</span> AlertDialog.<span class="me1">Builder</span><span class="br0">&#40;</span>view.<span class="me1">getContext</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>.
              setMessage<span class="br0">&#40;</span>message<span class="br0">&#41;</span>.
              setPositiveButton<span class="br0">&#40;</span><span class="st0">&quot;OK&quot;</span>, <span class="kw2">new</span> DialogInterface.<span class="me1">OnClickListener</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
                 @<span class="kw21">Override</span>
                 <span class="kw2">public</span> <span class="kw3">void</span> onClick<span class="br0">&#40;</span>DialogInterface dialog, <span class="kw3">int</span> which<span class="br0">&#41;</span> <span class="br0">&#123;</span>
                    <span class="co1">//do nothing</span>
                 <span class="br0">&#125;</span>
              <span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">create</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      dialog.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      result.<span class="me1">confirm</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw2">return</span> <span class="kw4">true</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div>
<div>Now this method gets called each  any time the  javascript alert () function is called within  the WebView. We also have to associate this to our WebView element using the setWebChromeClient() method as shown below.</div>
<div><div id="wpshdo_8" class="wp-synhighlighter-outer"><div id="wpshdt_8" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Associate the WebChromeClient with WebView"></a><a id="wpshat_8" class="wp-synhighlighter-title" href="#Associate the WebChromeClient with WebView"  onClick="javascript:wpsh_toggleBlock(8)" title="Click to show/hide code block">Associate the WebChromeClient with WebView</a></td><td align="right"><a href="#Associate the WebChromeClient with WebView" onClick="javascript:wpsh_code(8)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Associate the WebChromeClient with WebView" onClick="javascript:wpsh_print(8)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_8" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;">wv.<span class="me1">setWebChromeClient</span><span class="br0">&#40;</span><span class="kw2">new</span> CustomChromeclient<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div>
<h3>WebView Reload</h3>
<div>Next we enapsulate the logic to reload the WebView in a separate Java class and associate it with string identifier ( in this case &#8220;JSI&#8221;). We can then use this string identifier to refer the Java class from the browser&#8217;s javascript environment. We&#8217;ll see this usage a bit later when we see the modifications to the HTML file. But first the WebView reload logic is as shown below. Nothing fancy here. We have a simple object that takes in a reference to the WebView element as a constructor argument and calls the reload() method on it.</div>
<div><div id="wpshdo_9" class="wp-synhighlighter-outer"><div id="wpshdt_9" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Logic to reload the WebView"></a><a id="wpshat_9" class="wp-synhighlighter-title" href="#Logic to reload the WebView"  onClick="javascript:wpsh_toggleBlock(9)" title="Click to show/hide code block">Logic to reload the WebView</a></td><td align="right"><a href="#Logic to reload the WebView" onClick="javascript:wpsh_code(9)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Logic to reload the WebView" onClick="javascript:wpsh_print(9)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_9" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">private</span> <span class="kw2">class</span> JavaScriptInterface <span class="br0">&#123;</span>
   <span class="kw2">private</span> <span class="kw2">final</span> WebView m_wv<span class="sy0">;</span>
   <span class="kw2">public</span> JavaScriptInterface<span class="br0">&#40;</span>WebView wv<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      m_wv = wv<span class="sy0">;</span>
   <span class="br0">&#125;</span>
   <span class="kw2">public</span> <span class="kw3">void</span> reload<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="xtra ln-xtra">      m_wv.<span class="me1">reload</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></span>   <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div>
<div>we then bind this reload logic with the Javascript environment using the addJavascriptInterface () method. This method takes in the reference to the Java class and a string identifier as shown.</div>
<div><div id="wpshdo_10" class="wp-synhighlighter-outer"><div id="wpshdt_10" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Bind the reload logic to browser environment"></a><a id="wpshat_10" class="wp-synhighlighter-title" href="#Bind the reload logic to browser environment"  onClick="javascript:wpsh_toggleBlock(10)" title="Click to show/hide code block">Bind the reload logic to browser environment</a></td><td align="right"><a href="#Bind the reload logic to browser environment" onClick="javascript:wpsh_code(10)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Bind the reload logic to browser environment" onClick="javascript:wpsh_print(10)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_10" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;">wv.<span class="me1">addJavascriptInterface</span><span class="br0">&#40;</span><span class="kw2">new</span> JavaScriptInterface<span class="br0">&#40;</span>wv<span class="br0">&#41;</span>, <span class="st0">&quot;JSI&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div>
<h3>Calculating the Page load  count and intervals</h3>
<div>Here, we extend the WebViewClient class and override the onPageStarted () and OnPageFinished () methods. As the names imply, these are callback methods that get called when page has started and finished loading respectively. We use a static variable ( refreshCount) to keep track of the number of times the page has been refreshed and also note down the  start and end times for page load. We then subtract the two to get the load time and display the information on the screen as a <a title="Toasts in Android" href="http://gurushya.com/toasts-in-android/">Toast message</a>.</div>
<div>In addition, we also override the shouldOverrideUrlLoading ()  method to return false. This forces android to open any URL clicks within the WebView instead of its default behavior, which is to open the URL using the Webkit browser.</div>
<div><div id="wpshdo_11" class="wp-synhighlighter-outer"><div id="wpshdt_11" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Custom WebViewClient "></a><a id="wpshat_11" class="wp-synhighlighter-title" href="#Custom WebViewClient "  onClick="javascript:wpsh_toggleBlock(11)" title="Click to show/hide code block">Custom WebViewClient </a></td><td align="right"><a href="#Custom WebViewClient " onClick="javascript:wpsh_code(11)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Custom WebViewClient " onClick="javascript:wpsh_print(11)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_11" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">class</span> CustomWebViewclient <span class="kw2">extends</span> WebViewClient <span class="br0">&#123;</span>
   <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw3">int</span> refreshCount<span class="sy0">;</span>
   <span class="kw2">private</span> <span class="kw166">Context</span> m_context<span class="sy0">;</span>
   <span class="kw2">private</span> <span class="kw3">long</span> m_start<span class="sy0">;</span>
   <span class="kw2">private</span> CustomWebViewclient<span class="br0">&#40;</span><span class="kw166">Context</span> context<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      m_context = context<span class="sy0">;</span>
   <span class="br0">&#125;</span>
   @<span class="kw21">Override</span>
   <span class="kw2">public</span> <span class="kw3">boolean</span> shouldOverrideUrlLoading<span class="br0">&#40;</span>WebView view, <span class="kw21">String</span> url<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw2">return</span> <span class="kw4">false</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="xtra ln-xtra">   @<span class="kw21">Override</span></span>   <span class="kw2">public</span> <span class="kw3">void</span> onPageStarted<span class="br0">&#40;</span>WebView view, <span class="kw21">String</span> url, Bitmap favicon<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      m_start = <span class="kw21">System</span>.<span class="me1">currentTimeMillis</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      refreshCount++<span class="sy0">;</span>
   <span class="br0">&#125;</span>
   @<span class="kw21">Override</span>
<span class="xtra ln-xtra">   <span class="kw2">public</span> <span class="kw3">void</span> onPageFinished<span class="br0">&#40;</span>WebView view, <span class="kw21">String</span> url<span class="br0">&#41;</span> <span class="br0">&#123;</span></span>      <span class="kw3">long</span> interval = <span class="kw21">System</span>.<span class="me1">currentTimeMillis</span><span class="br0">&#40;</span><span class="br0">&#41;</span> - m_start<span class="sy0">;</span>
      Toast.<span class="me1">makeText</span><span class="br0">&#40;</span>m_context, <span class="st0">&quot;Loaded this webpage [&quot;</span> + refreshCount + <span class="st0">&quot;] &quot;</span> +
              <span class="st0">&quot;times in [&quot;</span> + interval + <span class="st0">&quot;] ms&quot;</span>, Toast.<span class="me1">LENGTH_SHORT</span><span class="br0">&#41;</span>.<span class="me1">show</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="xtra ln-xtra"><span class="br0">&#125;</span></span></pre></div></div></div>
<div>Again, associate the custom WebViewClient with the WebView element.</div>
<div><div id="wpshdo_12" class="wp-synhighlighter-outer"><div id="wpshdt_12" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Associate the CustomWebViewClient with the WebView element"></a><a id="wpshat_12" class="wp-synhighlighter-title" href="#Associate the CustomWebViewClient with the WebView element"  onClick="javascript:wpsh_toggleBlock(12)" title="Click to show/hide code block">Associate the CustomWebViewClient with the WebView element</a></td><td align="right"><a href="#Associate the CustomWebViewClient with the WebView element" onClick="javascript:wpsh_code(12)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Associate the CustomWebViewClient with the WebView element" onClick="javascript:wpsh_print(12)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_12" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;">wv.<span class="me1">setWebViewClient</span><span class="br0">&#40;</span><span class="kw2">new</span> CustomWebViewclient<span class="br0">&#40;</span><span class="kw2">this</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div></div>
<h3>HTML File</h3>
<div>Finally we modify the HTML file to have two buttons,</div>
<div>
<ul>
<li>one that raises an alert dialog in the browser which then displays our AlertDialog instead of the standard javascript alerts and</li>
<li>the second to reload the page in the WebView.  Note the use of the identifier &#8220;JSI&#8221; on the reloadBtn which is used to call the reload() method on the Javascript interface.</li>
</ul>
</div>
<div><div id="wpshdo_13" class="wp-synhighlighter-outer"><div id="wpshdt_13" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Local HTML resource that gets loaded into the WebView"></a><a id="wpshat_13" class="wp-synhighlighter-title" href="#Local HTML resource that gets loaded into the WebView"  onClick="javascript:wpsh_toggleBlock(13)" title="Click to show/hide code block">Local HTML resource that gets loaded into the WebView</a></td><td align="right"><a href="#Local HTML resource that gets loaded into the WebView" onClick="javascript:wpsh_code(13)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Local HTML resource that gets loaded into the WebView" onClick="javascript:wpsh_print(13)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_13" class="wp-synhighlighter-inner" style="display: block;"><pre class="html4strict" style="font-family:monospace;"><span class="sc0">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;</span>
<span class="sc0">        &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;</span>
<span class="sc2">&lt;<span class="kw2">html</span>&gt;</span>
<span class="sc2">&lt;<span class="kw2">head</span>&gt;</span>
    <span class="sc2">&lt;<span class="kw2">title</span>&gt;</span>Hello World<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">title</span>&gt;</span>
    <span class="sc-1">&lt;!--Javascript alert function--&gt;</span>
    <span class="sc2">&lt;<span class="kw2">script</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;text/javascript&quot;</span>&gt;</span>
        function toast() {
<span class="xtra ln-xtra">            alert(&quot;Raise a toast&quot;)</span>        }
    <span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">script</span>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">head</span>&gt;</span>
<span class="sc2">&lt;<span class="kw2">body</span>&gt;</span>
<span class="sc2">&lt;<span class="kw2">H1</span>&gt;</span>
    Hi There...I am a local resource
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">H1</span>&gt;</span>
<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;alertBtn&quot;</span>&gt;</span>
    <span class="sc-1">&lt;!--Call to the Javascript alert function--&gt;</span>
<span class="xtra ln-xtra">    <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;btn1&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;button&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;toast&quot;</span> <span class="kw3">onclick</span><span class="sy0">=</span><span class="st0">&quot;toast()&quot;</span><span class="sy0">/</span>&gt;</span></span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
<span class="sc2">&lt;<span class="kw2">div</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;reloadBtn&quot;</span>&gt;</span>
    <span class="sc-1">&lt;!--onclick function that calls the 'Java' Code --&gt;</span>
<span class="xtra ln-xtra">    <span class="sc2">&lt;<span class="kw2">input</span> <span class="kw3">id</span><span class="sy0">=</span><span class="st0">&quot;btn2&quot;</span> <span class="kw3">type</span><span class="sy0">=</span><span class="st0">&quot;button&quot;</span> <span class="kw3">value</span><span class="sy0">=</span><span class="st0">&quot;reload&quot;</span> <span class="kw3">onclick</span><span class="sy0">=</span><span class="st0">&quot;JSI.reload()&quot;</span><span class="sy0">/</span>&gt;</span></span><span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">div</span>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">body</span>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">html</span>&gt;</span></pre></div></div></div>
<h3>Activity class</h3>
<div>The overall activity class is listed here. All the Custom classes discussed above are inner classes of this activity class.</div>
<div><div id="wpshdo_14" class="wp-synhighlighter-outer"><div id="wpshdt_14" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Activity class overview"></a><a id="wpshat_14" class="wp-synhighlighter-title" href="#Activity class overview"  onClick="javascript:wpsh_toggleBlock(14)" title="Click to show/hide code block">Activity class overview</a></td><td align="right"><a href="#Activity class overview" onClick="javascript:wpsh_code(14)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Activity class overview" onClick="javascript:wpsh_print(14)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_14" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">public</span> <span class="kw2">class</span> WebViewDemo <span class="kw2">extends</span> Activity <span class="br0">&#123;</span>
   <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> URL_TO_LOAD = <span class="st0">&quot;http://google.com&quot;</span><span class="sy0">;</span>
   <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> LOCAL_RESOURCE = <span class="st0">&quot;file:///android_asset/html/HelloWorld.html&quot;</span><span class="sy0">;</span>
   @<span class="kw21">Override</span>
   <span class="kw2">protected</span> <span class="kw3">void</span> onCreate<span class="br0">&#40;</span>Bundle savedInstanceState<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw2">super</span>.<span class="me1">onCreate</span><span class="br0">&#40;</span>savedInstanceState<span class="br0">&#41;</span><span class="sy0">;</span>
      setContentView<span class="br0">&#40;</span>R.<span class="me1">layout</span>.<span class="me1">browser_demo</span><span class="br0">&#41;</span><span class="sy0">;</span>
      WebView wv = <span class="br0">&#40;</span>WebView<span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">browser1</span><span class="br0">&#41;</span><span class="sy0">;</span>
      loadResource<span class="br0">&#40;</span>wv, LOCAL_RESOURCE<span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="xtra ln-xtra">   <span class="kw2">private</span> <span class="kw3">void</span> loadResource<span class="br0">&#40;</span>WebView wv, <span class="kw21">String</span> resource<span class="br0">&#41;</span> <span class="br0">&#123;</span></span>      wv.<span class="me1">loadUrl</span><span class="br0">&#40;</span>resource<span class="br0">&#41;</span><span class="sy0">;</span>
      wv.<span class="me1">getSettings</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">setJavaScriptEnabled</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span>
      wv.<span class="me1">setWebChromeClient</span><span class="br0">&#40;</span><span class="kw2">new</span> CustomChromeclient<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      wv.<span class="me1">setWebViewClient</span><span class="br0">&#40;</span><span class="kw2">new</span> CustomWebViewclient<span class="br0">&#40;</span><span class="kw2">this</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      wv.<span class="me1">addJavascriptInterface</span><span class="br0">&#40;</span><span class="kw2">new</span> JavaScriptInterface<span class="br0">&#40;</span>wv<span class="br0">&#41;</span>, <span class="st0">&quot;JSI&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="xtra ln-xtra">   <span class="br0">&#125;</span></span><span class="xtra ln-xtra">  <span class="co1">// Custom classes for WebViewclient, WebChromeClient and JavaScript interfaces...</span></span><span class="xtra ln-xtra"><span class="br0">&#125;</span></span></pre></div></div></div>
<div>Happy Coding !!!.</div>
]]></content:encoded>
			<wfw:commentRss>http://gurushya.com/customizing-android-webview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Display Web Pages in your android application</title>
		<link>http://gurushya.com/display-web-pages-in-your-android-application/</link>
		<comments>http://gurushya.com/display-web-pages-in-your-android-application/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 15:08:17 +0000</pubDate>
		<dc:creator>Kannan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android tutorial]]></category>

		<guid isPermaLink="false">http://kannanchandrasekaran.com/?p=778</guid>
		<description><![CDATA[Webview extends the View class and is useful for displaying a web page  as part of your activity. By default it behaves like a browser minus things like navigation controls, address bar etc. Even javascript is disabled with the default settings. You can use it to display things like help files , end-user agreements, FAQs [...]]]></description>
			<content:encoded><![CDATA[<div>Webview extends the View class and is useful for displaying a web page  as part of your activity. By default it behaves like a browser minus things like navigation controls, address bar etc. Even javascript is disabled with the default settings.</div>
<div id="attachment_792" class="wp-caption alignright" style="width: 174px"><a href="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/webview_url_demo.jpg"><img class="size-medium wp-image-792 " title="Load a url using webview" src="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/webview_url_demo-182x300.jpg" alt="Load Url using Webview" width="164" height="270" /></a><p class="wp-caption-text">Load url using WebView</p></div>
<div>You can use it to display things like help files , end-user agreements, FAQs etc.  Since such contents change frequently, its useful to make a mobile friendly HTML webpage, and display them as a webpage rather than packaging them as part of your application.</div>
<h3>Example</h3>
<div>Lets begin with a simple example that loads a URL from internet or local HTML file.</div>
<h4>XML layout</h4>
<div>This is not much different from any of the previous examples we have seen. You have a simple WebView element that takes up the entire screen.</div>
<div><div id="wpshdo_15" class="wp-synhighlighter-outer"><div id="wpshdt_15" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Xml layout file for WebView element"></a><a id="wpshat_15" class="wp-synhighlighter-title" href="#Xml layout file for WebView element"  onClick="javascript:wpsh_toggleBlock(15)" title="Click to show/hide code block">Xml layout file for WebView element</a></td><td align="right"><a href="#Xml layout file for WebView element" onClick="javascript:wpsh_code(15)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Xml layout file for WebView element" onClick="javascript:wpsh_print(15)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_15" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc3"><span class="re1">&lt;WebView</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></span>
<span class="sc3">         <span class="re0">android:id</span>=<span class="st0">&quot;@+id/browser1&quot;</span></span>
<span class="sc3">         <span class="re0">android:layout_width</span>=<span class="st0">&quot;match_parent&quot;</span></span>
<span class="sc3">         <span class="re0">android:layout_height</span>=<span class="st0">&quot;match_parent&quot;</span><span class="re2">/&gt;</span></span></pre></div></div></div>
<h4>AndroidManifest Permissions</h4>
<div>In order for your application to access resources from the internet, you need to specify the Permission in the Android manifest file. Without this android wont let you load a URL from the internet.</div>
<div><div id="wpshdo_16" class="wp-synhighlighter-outer"><div id="wpshdt_16" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Permission entry in the AndroidManifest.xml file"></a><a id="wpshat_16" class="wp-synhighlighter-title" href="#Permission entry in the AndroidManifest.xml file"  onClick="javascript:wpsh_toggleBlock(16)" title="Click to show/hide code block">Permission entry in the AndroidManifest.xml file</a></td><td align="right"><a href="#Permission entry in the AndroidManifest.xml file" onClick="javascript:wpsh_code(16)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Permission entry in the AndroidManifest.xml file" onClick="javascript:wpsh_print(16)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_16" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc-1">&lt;!--Specify the permissions that the application uses--&gt;</span>
<span class="sc3"><span class="re1">&lt;uses-permission</span> <span class="re0">android:name</span>=<span class="st0">&quot;android.permission.INTERNET&quot;</span><span class="re2">/&gt;</span></span></pre></div></div></div>
<h4>HTML Asset</h4>
<div>In addition to the loading a URL from the internet, you can also load resources local to your application. In this case we have a simple HTML page (HelloWorld.html) under the assets/html/ folder.  You can access this local resource in your Java code by prefixing your URI (Uniform resource Identifier) with &#8220;file:///android_asset/&lt;path-to-resource&gt;&#8221; as shown later.</div>
<div><div id="wpshdo_17" class="wp-synhighlighter-outer"><div id="wpshdt_17" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#A local HTML resource under the assets folder"></a><a id="wpshat_17" class="wp-synhighlighter-title" href="#A local HTML resource under the assets folder"  onClick="javascript:wpsh_toggleBlock(17)" title="Click to show/hide code block">A local HTML resource under the assets folder</a></td><td align="right"><a href="#A local HTML resource under the assets folder" onClick="javascript:wpsh_code(17)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#A local HTML resource under the assets folder" onClick="javascript:wpsh_print(17)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_17" class="wp-synhighlighter-inner" style="display: block;"><pre class="html4strict" style="font-family:monospace;"><span class="sc0">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot;</span>
<span class="sc0">        &quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;</span>
<span class="sc2">&lt;<span class="kw2">html</span>&gt;</span>
<span class="sc2">&lt;<span class="kw2">head</span>&gt;</span>
    <span class="sc2">&lt;<span class="kw2">title</span>&gt;</span>Hello World<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">title</span>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">head</span>&gt;</span>
<span class="sc2">&lt;<span class="kw2">body</span>&gt;</span>
<span class="sc2">&lt;<span class="kw2">H1</span>&gt;</span>
    Hi There...I am a local resource
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">H1</span>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">body</span>&gt;</span>
<span class="sc2">&lt;<span class="sy0">/</span><span class="kw2">html</span>&gt;</span></pre></div></div></div>
<h4>Java code</h4>
<div id="attachment_791" class="wp-caption alignright" style="width: 200px"><a href="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/webview_local_asset_demo.jpg"><img class="size-medium wp-image-791 " title="Load a local resource using webview" src="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/webview_local_asset_demo-237x300.jpg" alt="Load a local resource using webview" width="190" height="240" /></a><p class="wp-caption-text">Load a local resource using webview</p></div>
<div>Finally, within the activity class,</div>
<div>
<ul>
<li>We load the WebView element by its ID using the findViewById () method and</li>
<li>Use a private helper method called loadResource() that can load both the URL and the local resource</li>
</ul>
</div>
<div>Couple things to note here.</div>
<div>
<ul>
<li>As mentioned earlier, Javascript is disabled by default. You have to explicitly enable it by accessing the WebView settings  and calling setJavaScriptEnabled () method as shown.</li>
<li>If you want to load the local resource, simply call the private  loadResource () method with the LOCAL_RESOURCE string instead of URL_TO_LOAD string .</li>
</ul>
</div>
<div><div id="wpshdo_18" class="wp-synhighlighter-outer"><div id="wpshdt_18" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Activity class to demo WebView element"></a><a id="wpshat_18" class="wp-synhighlighter-title" href="#Activity class to demo WebView element"  onClick="javascript:wpsh_toggleBlock(18)" title="Click to show/hide code block">Activity class to demo WebView element</a></td><td align="right"><a href="#Activity class to demo WebView element" onClick="javascript:wpsh_code(18)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Activity class to demo WebView element" onClick="javascript:wpsh_print(18)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_18" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">public</span> <span class="kw2">class</span> WebViewDemo <span class="kw2">extends</span> Activity <span class="br0">&#123;</span>
   <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> URL_TO_LOAD = <span class="st0">&quot;http://google.com&quot;</span><span class="sy0">;</span>
   <span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span> LOCAL_RESOURCE = <span class="st0">&quot;file:///android_asset/html/HelloWorld.html&quot;</span><span class="sy0">;</span>
   @<span class="kw21">Override</span>
   <span class="kw2">protected</span> <span class="kw3">void</span> onCreate<span class="br0">&#40;</span>Bundle savedInstanceState<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw2">super</span>.<span class="me1">onCreate</span><span class="br0">&#40;</span>savedInstanceState<span class="br0">&#41;</span><span class="sy0">;</span>
      setContentView<span class="br0">&#40;</span>R.<span class="me1">layout</span>.<span class="me1">browser_demo</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="xtra ln-xtra">      WebView wv = <span class="br0">&#40;</span>WebView<span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">browser1</span><span class="br0">&#41;</span><span class="sy0">;</span></span><span class="xtra ln-xtra">      loadResource<span class="br0">&#40;</span>wv, URL_TO_LOAD<span class="br0">&#41;</span><span class="sy0">;</span></span>   <span class="br0">&#125;</span>
   <span class="kw2">private</span> <span class="kw3">void</span> loadResource<span class="br0">&#40;</span>WebView wv, <span class="kw21">String</span> resource<span class="br0">&#41;</span> <span class="br0">&#123;</span>
<span class="xtra ln-xtra">      wv.<span class="me1">loadUrl</span><span class="br0">&#40;</span>resource<span class="br0">&#41;</span><span class="sy0">;</span></span><span class="xtra ln-xtra">      wv.<span class="me1">getSettings</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">setJavaScriptEnabled</span><span class="br0">&#40;</span><span class="kw4">true</span><span class="br0">&#41;</span><span class="sy0">;</span></span>   <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></div>
]]></content:encoded>
			<wfw:commentRss>http://gurushya.com/display-web-pages-in-your-android-application/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android Spinner</title>
		<link>http://gurushya.com/android-spinner/</link>
		<comments>http://gurushya.com/android-spinner/#comments</comments>
		<pubDate>Sun, 11 Mar 2012 00:00:42 +0000</pubDate>
		<dc:creator>Kannan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android tutorial]]></category>

		<guid isPermaLink="false">http://kannanchandrasekaran.com/?p=732</guid>
		<description><![CDATA[Spinners are the Dropdown widget equivalent in android.  They are useful for displaying the list of items especially when the available screen real estate is less. Only the selected item is shown while the rest are hidden. Clicking on the spinner results in a drop down list showing the list contents. Just as with ListViews you have [...]]]></description>
			<content:encoded><![CDATA[<p>Spinners are the Dropdown widget equivalent in android.  They are useful for displaying the list of items especially when the available screen real estate is less. Only the selected item is shown while the rest are hidden. Clicking on the spinner results in a drop down list showing the list contents. Just as with <a href="http://gurushya.com/android-listview-part1/">ListViews</a> you have to feed the input items using an  Adapter and attach the adapter to the spinner.  In addition you can register a callback object for tracking the selection changes via the setOnItemSelectedListener () interface.</p>
<div id="attachment_736" class="wp-caption alignright" style="width: 179px"><a href="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/spinner_demo.jpg"><img class="size-medium wp-image-736 " title="Android Spinner Demo" src="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/spinner_demo-211x300.jpg" alt="Android spinner demo example output" width="169" height="240" /></a><p class="wp-caption-text">Android Spinner Demo</p></div>
<h3><strong>Example</strong></h3>
<div>Lets see the use of spinner with a example. In this example, we have a TextView and a Spinner element wrapped in a LinearLayout. When the user clicks on the spinner a drop down list with the names of the mobile development platforms is displayed. Every time the user makes a selection, we display the selection in the TextView element. Its the same ClickTracker example we saw in the ListView demo but adapted to use the spinner element instead.</div>
<div>Lets now see the xml layout and Java code associated with this example.</div>
<div>
<div id="wpshdo_19" class="wp-synhighlighter-outer"><div id="wpshdt_19" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#XML Layout for Android Spinner example "></a><a id="wpshat_19" class="wp-synhighlighter-title" href="#XML Layout for Android Spinner example "  onClick="javascript:wpsh_toggleBlock(19)" title="Click to show/hide code block">XML Layout for Android Spinner example </a></td><td align="right"><a href="#XML Layout for Android Spinner example " onClick="javascript:wpsh_code(19)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#XML Layout for Android Spinner example " onClick="javascript:wpsh_print(19)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_19" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">?&gt;</span></span>
&nbsp;
<span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></span>
<span class="sc3">              <span class="re0">android:orientation</span>=<span class="st0">&quot;vertical&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_width</span>=<span class="st0">&quot;fill_parent&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_height</span>=<span class="st0">&quot;fill_parent&quot;</span><span class="re2">&gt;</span></span>
&nbsp;
    <span class="sc3"><span class="re1">&lt;TextView</span> <span class="re0">android:id</span>=<span class="st0">&quot;@+id/spin_tv1&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_width</span>=<span class="st0">&quot;match_parent&quot;</span><span class="re2">/&gt;</span></span>
&nbsp;
<span class="xtra ln-xtra">    <span class="sc3"><span class="re1">&lt;Spinner</span> <span class="re0">android:id</span>=<span class="st0">&quot;@+id/spin1&quot;</span></span></span><span class="sc3">             <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></span>
<span class="sc3">             <span class="re0">android:layout_width</span>=<span class="st0">&quot;match_parent&quot;</span><span class="re2">/&gt;</span></span>
&nbsp;
<span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></pre></div></div></div>
<div>Next we define a String array element that will serve as the input list of Strings for the ArrayAdapter class.</div>
<div>
<div id="wpshdo_20" class="wp-synhighlighter-outer"><div id="wpshdt_20" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#String array of mobile platforms"></a><a id="wpshat_20" class="wp-synhighlighter-title" href="#String array of mobile platforms"  onClick="javascript:wpsh_toggleBlock(20)" title="Click to show/hide code block">String array of mobile platforms </a></td><td align="right"><a href="#String array of mobile platforms" onClick="javascript:wpsh_code(20)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#String array of mobile platforms" onClick="javascript:wpsh_print(20)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_20" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;string-array</span> <span class="re0">name</span>=<span class="st0">&quot;dev_platforms&quot;</span><span class="re2">&gt;</span></span>
    <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span>Android<span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span>Iphone<span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span>Windows<span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span>Bada<span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span>WebOS<span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/string-array<span class="re2">&gt;</span></span></span></pre></div></div>
<div>
<div>Once we define the layout and the input array, we do the following in the Java code.</div>
<ul>
<li>Register the XML layout with the Activity using the setContentView() method</li>
<li>Fetch the array string of mobile platforms using the getResources().getStringArray() method by supplying the resource id as argument.</li>
<li>Pass in the string array as input and <em>android.R.layout.simple_spinner_dropdown_item</em> as layout to the constructor of the ArrayAdapter class</li>
<li>Hook the adapter with the spinner element using the setAdapter () method</li>
<li>Define a AdapterView.OnItemSelectedListener () to track the user selections and register it with the spinner using the setOnItemSelectedListener () method.</li>
</ul>
<div>
<div id="wpshdo_21" class="wp-synhighlighter-outer"><div id="wpshdt_21" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Java Code for the Android Spinner example"></a><a id="wpshat_21" class="wp-synhighlighter-title" href="#Java Code for the Android Spinner example"  onClick="javascript:wpsh_toggleBlock(21)" title="Click to show/hide code block">Java Code for the Android Spinner example</a></td><td align="right"><a href="#Java Code for the Android Spinner example" onClick="javascript:wpsh_code(21)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Java Code for the Android Spinner example" onClick="javascript:wpsh_print(21)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_21" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">public</span> <span class="kw2">class</span> SpinnerDemo <span class="kw2">extends</span> Activity <span class="br0">&#123;</span>
   <span class="kw2">private</span> TextView m_tv<span class="sy0">;</span>
&nbsp;
   @<span class="kw21">Override</span>
   <span class="kw2">protected</span> <span class="kw3">void</span> onCreate<span class="br0">&#40;</span>Bundle savedInstanceState<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw2">super</span>.<span class="me1">onCreate</span><span class="br0">&#40;</span>savedInstanceState<span class="br0">&#41;</span><span class="sy0">;</span>
      setContentView<span class="br0">&#40;</span>R.<span class="me1">layout</span>.<span class="me1">spinnerdemo</span><span class="br0">&#41;</span><span class="sy0">;</span>
      m_tv = <span class="br0">&#40;</span>TextView<span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">spin_tv1</span><span class="br0">&#41;</span><span class="sy0">;</span>
      Spinner spinner = <span class="br0">&#40;</span>Spinner<span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">spin1</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="xtra ln-xtra">      <span class="kw21">String</span><span class="br0">&#91;</span><span class="br0">&#93;</span> platforms = getResources<span class="br0">&#40;</span><span class="br0">&#41;</span>.</span>              <span class="me1">getStringArray</span><span class="br0">&#40;</span>R.<span class="me1">array</span>.<span class="me1">dev_platforms</span><span class="br0">&#41;</span><span class="sy0">;</span>
      ArrayAdapter<span class="sy0">&lt;</span>String<span class="sy0">&gt;</span> adapter =
              <span class="kw2">new</span> ArrayAdapter<span class="sy0">&lt;</span>String<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="kw2">this</span>,
<span class="xtra ln-xtra">                      android.<span class="me1">R</span>.<span class="me1">layout</span>.<span class="me1">simple_spinner_dropdown_item</span>,</span>                      platforms<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="xtra ln-xtra">      spinner.<span class="me1">setAdapter</span><span class="br0">&#40;</span>adapter<span class="br0">&#41;</span><span class="sy0">;</span></span>&nbsp;
<span class="xtra ln-xtra">      spinner.<span class="me1">setOnItemSelectedListener</span><span class="br0">&#40;</span><span class="kw2">new</span> AdapterView.<span class="me1">OnItemSelectedListener</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></span>         @<span class="kw21">Override</span>
         <span class="kw2">public</span> <span class="kw3">void</span> onItemSelected<span class="br0">&#40;</span>AdapterView<span class="sy0">&lt;?&gt;</span> parent, <span class="kw116">View</span> view, <span class="kw3">int</span> position, <span class="kw3">long</span> id<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            TextView tv = <span class="br0">&#40;</span>TextView<span class="br0">&#41;</span> view<span class="sy0">;</span>
            m_tv.<span class="me1">setText</span><span class="br0">&#40;</span>tv.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
         <span class="br0">&#125;</span>
&nbsp;
         @<span class="kw21">Override</span>
         <span class="kw2">public</span> <span class="kw3">void</span> onNothingSelected<span class="br0">&#40;</span>AdapterView<span class="sy0">&lt;?&gt;</span> parent<span class="br0">&#41;</span> <span class="br0">&#123;</span>
            m_tv.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
         <span class="br0">&#125;</span>
      <span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>
<div>
<h3><strong><strong>Setting DropDown Views </strong></strong></h3>
<div id="attachment_737" class="wp-caption alignright" style="width: 186px"><a href="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/spinner_dropdown-layout-demo.jpg"><img class="size-medium wp-image-737  " title="Android spinner dropdown layout view demo" src="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/spinner_dropdown-layout-demo-220x300.jpg" alt="Android spinner DropDownView layout " width="176" height="240" /></a><p class="wp-caption-text">Checked DropDown View</p></div>
<div><strong><br />
</strong></div>
<div>You can also display a different drop down view by using the setDropDownViewResource () method on the ArrayAdapter class . In our example, we can display a checked item view using the  <em>android.R.layout.simple_list_item_checked</em>  for the dropdown view in addition to the default view passed in the constructor. Adding this line of code before registering the adapter with the spinner results in the output as shown.</div>
</div>
<div>
<div id="wpshdo_22" class="wp-synhighlighter-outer"><div id="wpshdt_22" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Set the dropdown view on the ArrayAdapter"></a><a id="wpshat_22" class="wp-synhighlighter-title" href="#Set the dropdown view on the ArrayAdapter"  onClick="javascript:wpsh_toggleBlock(22)" title="Click to show/hide code block">Set the dropdown view on the ArrayAdapter</a></td><td align="right"><a href="#Set the dropdown view on the ArrayAdapter" onClick="javascript:wpsh_code(22)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Set the dropdown view on the ArrayAdapter" onClick="javascript:wpsh_print(22)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_22" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;">adapter.<span class="me1">setDropDownViewResource</span><span class="br0">&#40;</span>android.<span class="me1">R</span>.<span class="me1">layout</span>.<span class="me1">simple_list_item_checked</span><span class="br0">&#41;</span><span class="sy0">;</span></pre></div></div>
<p>&nbsp;</p>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://gurushya.com/android-spinner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android ListView Part 3</title>
		<link>http://gurushya.com/android-listview-part-3/</link>
		<comments>http://gurushya.com/android-listview-part-3/#comments</comments>
		<pubDate>Wed, 07 Mar 2012 00:00:46 +0000</pubDate>
		<dc:creator>Kannan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android tutorial]]></category>

		<guid isPermaLink="false">http://kannanchandrasekaran.com/?p=696</guid>
		<description><![CDATA[In part 2 of the series, we discussed how android&#8217;s ArrayAdapter class internally reuses views to optimize performance. However reusing views has the side effect of losing any state associated with the current data, as the view is recycled andupdated with new data. Lets say, we want to change the appearance of the text when the user [...]]]></description>
			<content:encoded><![CDATA[<div>
<div>In <a href="http://gurushya.com/android-listview-part-2/">part 2</a> of the series, we discussed how android&#8217;s ArrayAdapter class internally reuses views to optimize performance. However reusing views has the side effect of losing any state associated with the current data, as the view is recycled andupdated with new data. Lets say, we want to change the appearance of the text when the user clicks on a element within ListView. Just building that logic  as part of  the onListItemClick () method (as we did for the previous examples) won&#8217;t help because we lose this information as soon as the user scrolls the ListView.  So we need some place to store and retrieve this information based on the context.</p>
<div id="attachment_698" class="wp-caption alignright" style="width: 192px"><a href="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/ListView3_demo_with_custom_adapter.jpg"><img class="size-medium wp-image-698" title="ListView3_demo_with_custom_adapter" src="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/ListView3_demo_with_custom_adapter-182x300.jpg" alt="Android ListView Demo for using custom adapters" width="182" height="300" /></a><p class="wp-caption-text">ListView Demo using Custom Adapters</p></div>
</div>
<div>Android conveniently provides a getTag () and setTag () methods on all View objects, that will let you associate any arbitrary objects. We&#8217;ll see how to use this using a simple example.</div>
<h3><strong>Example</strong></h3>
<div>For this example, we&#8217;ll convert the text in the ListView element to uppercase and surround it in quotes as soon as the user clicks on the element using a custom adapter class. The input to our custom adapter is a dummy array of Strings labeled Test0 to Test14.</div>
<div><div id="wpshdo_23" class="wp-synhighlighter-outer"><div id="wpshdt_23" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Dummy Input Items"></a><a id="wpshat_23" class="wp-synhighlighter-title" href="#Dummy Input Items"  onClick="javascript:wpsh_toggleBlock(23)" title="Click to show/hide code block">Dummy Input Items</a></td><td align="right"><a href="#Dummy Input Items" onClick="javascript:wpsh_code(23)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Dummy Input Items" onClick="javascript:wpsh_print(23)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_23" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">private</span> <span class="kw2">static</span> <span class="kw2">final</span> <span class="kw21">String</span><span class="br0">&#91;</span><span class="br0">&#93;</span> s_dummyItems = <span class="kw2">new</span> <span class="kw21">String</span><span class="br0">&#91;</span>15<span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp;
<span class="kw2">static</span> <span class="br0">&#123;</span>
<span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw3">int</span> i = <span class="nu0">0</span><span class="sy0">;</span> i <span class="sy0">&lt;</span> s_dummyItems.<span class="me1">length</span><span class="sy0">;</span> i++<span class="br0">&#41;</span> <span class="br0">&#123;</span>
   s_dummyItems<span class="br0">&#91;</span>i<span class="br0">&#93;</span> = <span class="st0">&quot;Test &quot;</span> + i<span class="sy0">;</span>
<span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></p>
</div>
<div>The fact that the user clicked on a particular element in the ListView is a state that must be stored and checked every time we try to render  the element on the screen.  We encapsulate this state in a separate class as shown below and associate it with the View object passed as argument to our custom adapter&#8217;s getView () method. It consists of a boolean array representing whether the element has been clicked or not and contains methods for reading and writing this state.</div>
<div id="wpshdo_24" class="wp-synhighlighter-outer"><div id="wpshdt_24" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Class to encapsulate the state associated with ListView"></a><a id="wpshat_24" class="wp-synhighlighter-title" href="#Class to encapsulate the state associated with ListView"  onClick="javascript:wpsh_toggleBlock(24)" title="Click to show/hide code block">Class to encapsulate the state associated with ListView</a></td><td align="right"><a href="#Class to encapsulate the state associated with ListView" onClick="javascript:wpsh_code(24)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Class to encapsulate the state associated with ListView" onClick="javascript:wpsh_print(24)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_24" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">private</span> <span class="kw2">class</span> <span class="kw154">State</span> <span class="br0">&#123;</span>
   <span class="kw2">private</span> <span class="kw3">boolean</span><span class="br0">&#91;</span><span class="br0">&#93;</span> caps = <span class="kw2">new</span> <span class="kw3">boolean</span><span class="br0">&#91;</span>s_dummyItems.<span class="me1">length</span><span class="br0">&#93;</span><span class="sy0">;</span>
&nbsp;
   <span class="kw2">public</span> <span class="kw3">void</span> setCaps<span class="br0">&#40;</span><span class="kw3">int</span> position<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>position <span class="sy0">&lt;</span> caps.<span class="me1">length</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
         caps<span class="br0">&#91;</span>position<span class="br0">&#93;</span> = <span class="kw4">true</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
   <span class="br0">&#125;</span>
&nbsp;
   <span class="kw2">public</span> <span class="kw3">boolean</span> isCaps<span class="br0">&#40;</span><span class="kw3">int</span> position<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw2">return</span> caps<span class="br0">&#91;</span>position<span class="br0">&#93;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div>
<div>The Layout for our Custom Adapter class is again a simple linear layout that contains a single TextView element.</div>
<div><div id="wpshdo_25" class="wp-synhighlighter-outer"><div id="wpshdt_25" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Custom XML layout"></a><a id="wpshat_25" class="wp-synhighlighter-title" href="#Custom XML layout"  onClick="javascript:wpsh_toggleBlock(25)" title="Click to show/hide code block">Custom XML layout</a></td><td align="right"><a href="#Custom XML layout" onClick="javascript:wpsh_code(25)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Custom XML layout" onClick="javascript:wpsh_print(25)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_25" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">?&gt;</span></span>
&nbsp;
<span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_width</span>=<span class="st0">&quot;fill_parent&quot;</span></span>
<span class="sc3">              <span class="re0">android:orientation</span>=<span class="st0">&quot;vertical&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_height</span>=<span class="st0">&quot;fill_parent&quot;</span><span class="re2">&gt;</span></span>
 <span class="sc3"><span class="re1">&lt;TextView</span> <span class="re0">android:id</span>=<span class="st0">&quot;@+id/adapter_bold_text&quot;</span></span>
<span class="sc3">           <span class="re0">android:text</span>=<span class="st0">&quot;Test&quot;</span></span>
<span class="sc3">           <span class="re0">android:lines</span>=<span class="st0">&quot;3&quot;</span></span>
<span class="sc3">           <span class="re0">android:textSize</span>=<span class="st0">&quot;20dip&quot;</span></span>
<span class="sc3">           <span class="re0">android:gravity</span>=<span class="st0">&quot;center_horizontal&quot;</span></span>
<span class="sc3">           <span class="re0">android:layout_gravity</span>=<span class="st0">&quot;center&quot;</span></span>
<span class="sc3">           <span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span></span>
<span class="sc3">           <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span><span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></pre></div></div></p>
</div>
<div><strong><br />
</strong></div>
<p>Lets now look at the logic within the onListItemClick () callback method that gets called each time the user clicks on a ListView element.  The View argument to the method is our custom layout shown above. The first time its called the State is null. We create a new instance of State object, set the boolean value corresponding to the &#8220;position&#8221; argument to true and associate the State object with the View using the setTag() method. For subsequent calls, we modify the same state object. Thus for each item that is clicked we mark its state and keep track of it within the View object.</p>
</div>
<div><div id="wpshdo_26" class="wp-synhighlighter-outer"><div id="wpshdt_26" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Callback method for ListView Item click"></a><a id="wpshat_26" class="wp-synhighlighter-title" href="#Callback method for ListView Item click"  onClick="javascript:wpsh_toggleBlock(26)" title="Click to show/hide code block">Callback method for ListView Item click</a></td><td align="right"><a href="#Callback method for ListView Item click" onClick="javascript:wpsh_code(26)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Callback method for ListView Item click" onClick="javascript:wpsh_print(26)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_26" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">protected</span> <span class="kw3">void</span> onListItemClick<span class="br0">&#40;</span><span class="kw117">ListView</span> l, <span class="kw116">View</span> v, <span class="kw3">int</span> position, <span class="kw3">long</span> id<span class="br0">&#41;</span> <span class="br0">&#123;</span>
   <span class="kw154">State</span> state = <span class="br0">&#40;</span><span class="kw154">State</span><span class="br0">&#41;</span> v.<span class="me1">getTag</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="kw1">if</span> <span class="br0">&#40;</span>state == <span class="kw4">null</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
      state = <span class="kw2">new</span> <span class="kw154">State</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
   state.<span class="me1">setCaps</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span><span class="sy0">;</span>
   v.<span class="me1">setTag</span><span class="br0">&#40;</span>state<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span></pre></div></div></p>
</div>
<div>We then check this State object each time we want to render the  ListView element on the screen by overriding the getView () method within our custom adapter class.  The custom adapter class is a inner class within our Demo Activity. We pass the following elements in the constructor  of the Custom Adapter class:</div>
<ul>
<li>Context, which is the Activity itself</li>
<li>Custom layout</li>
<li>TextView element within it and</li>
<li>Dummy input Strings that we initialized earlier.</li>
</ul>
<p>Finally, in the getView() method, we check for the existence of State object within the View argument. If it not null, we get the reference to the TextView element within the View using the findViewById () method and change the case of the text and surround it with quotes. The same pattern can be used to do something more useful than changing the characters to uppercase.</p>
<div>
<div><div id="wpshdo_27" class="wp-synhighlighter-outer"><div id="wpshdt_27" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Custom Adapter Class"></a><a id="wpshat_27" class="wp-synhighlighter-title" href="#Custom Adapter Class"  onClick="javascript:wpsh_toggleBlock(27)" title="Click to show/hide code block">Custom Adapter Class</a></td><td align="right"><a href="#Custom Adapter Class" onClick="javascript:wpsh_code(27)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Custom Adapter Class" onClick="javascript:wpsh_print(27)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_27" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">private</span> <span class="kw2">class</span> BoldViewAdapter <span class="kw2">extends</span> ArrayAdapter<span class="sy0">&lt;</span>String<span class="sy0">&gt;</span> <span class="br0">&#123;</span>
   <span class="kw2">public</span> BoldViewAdapter<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
&nbsp;
      <span class="kw2">super</span><span class="br0">&#40;</span>ListViewInteractDemo.<span class="kw2">this</span>,
              R.<span class="me1">layout</span>.<span class="me1">bold_text_adapter_view</span>,
              R.<span class="me1">id</span>.<span class="me1">adapter_bold_text</span>, s_dummyItems<span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
&nbsp;
   @<span class="kw21">Override</span>
   <span class="kw2">public</span> <span class="kw116">View</span> getView<span class="br0">&#40;</span><span class="kw3">int</span> position, <span class="kw116">View</span> convertView, ViewGroup parent<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw116">View</span> customView = <span class="kw2">super</span>.<span class="me1">getView</span><span class="br0">&#40;</span>position, convertView, parent<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="xtra ln-xtra">      <span class="kw154">State</span> state = <span class="br0">&#40;</span><span class="kw154">State</span><span class="br0">&#41;</span> customView.<span class="me1">getTag</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></span>      TextView txtView = <span class="br0">&#40;</span>TextView<span class="br0">&#41;</span> customView.
<span class="xtra ln-xtra">              <span class="me1">findViewById</span><span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">adapter_bold_text</span><span class="br0">&#41;</span><span class="sy0">;</span></span>      <span class="kw21">String</span> text = txtView.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>state <span class="sy0">!</span>= <span class="kw4">null</span> <span class="sy0">&amp;&amp;</span> state.<span class="me1">isCaps</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
         txtView.<span class="me1">setText</span><span class="br0">&#40;</span><span class="st0">&quot;' &quot;</span> + text.<span class="me1">toUpperCase</span><span class="br0">&#40;</span><span class="br0">&#41;</span> + <span class="st0">&quot; '&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="xtra ln-xtra">      <span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span></span><span class="xtra ln-xtra">         <span class="co1">// undo if any changes you make to the parent view also</span></span><span class="xtra ln-xtra">      <span class="br0">&#125;</span></span>      <span class="kw2">return</span> customView<span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></p>
</div>
<div>Also note the blank else block. This is a place holder to undo any changes done to the View object itself. Suppose, in addition to changing the case of the text, you also changed the background color of the TextView element itself, for the clicked item. Since the same View instance is reused, you might also notice the color change on the items where the user has not yet clicked which  is undesirable. You can undo such changes within the else block if necessary.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://gurushya.com/android-listview-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android ListView Part 2</title>
		<link>http://gurushya.com/android-listview-part-2/</link>
		<comments>http://gurushya.com/android-listview-part-2/#comments</comments>
		<pubDate>Sun, 04 Mar 2012 08:19:08 +0000</pubDate>
		<dc:creator>Kannan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android tutorial]]></category>

		<guid isPermaLink="false">http://kannanchandrasekaran.com/?p=647</guid>
		<description><![CDATA[In part1 of this series, you learned what an adapter is and how it can be used to feed a simple ListView element.  Continuing from there, lets learn how to make some useful customizations to the ListView and a trick that android uses to optimize the usage of ListView elements for better performance. MultiChoiceMode Lets start with [...]]]></description>
			<content:encoded><![CDATA[<p>In <a href="http://gurushya.com/android-listview-part1/">part1</a> of this series, you learned what an adapter is and how it can be used to feed a simple ListView element.  Continuing from there, lets learn how to make some useful customizations to the ListView and a trick that android uses to optimize the usage of ListView elements for better performance.</p>
<div id="attachment_648" class="wp-caption alignright" style="width: 197px"><a href="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/ListView2_demo.jpg"><img class="size-full wp-image-648   " title="ListView2_multiple_choice" src="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/ListView2_demo.jpg" alt="Android ListView with multiple choice demo" width="187" height="270" /></a><p class="wp-caption-text">ListView with multiple selections</p></div>
<h3><strong>MultiChoiceMode</strong></h3>
<div>Lets start with a simple customization. Lets reuse the example that we saw in part 1 and enable multi-selection on the drop down list.  To do this you need to make two simple changes,</div>
<ul>
<li>Specify the &#8220;android:choiceMode&#8221; attribute in the XML layout as &#8220;multipleChoice&#8221;</li>
<li>Use the android.R.layout.simple_list_item_multiple_choice instead of android.R.layout.simple_list_item_1 as the TextView layout in the ArrayAdapter constructor.</li>
</ul>
<div>
<div>
<h3><strong>Custom Layout for the ListView</strong></h3>
<div><strong><br />
</strong></div>
<div>Next, lets use a custom layout instead of the predefined layouts that we have been feeding into the constructor of the ArrayAdapter.  Lets customize by add a image before each string in the ListView. To keep it simple, we&#8217;ll be adding the default launcher image that comes with Android and resort to using a smaller font size. The resulting output is a ListView that looks as shown below.</div>
</div>
<div>
<ul>
<li>Create a new xml layout with a ImageView and a TextView element. Specify the source attribute in the ImageView element to point to the launcher image in the res/drawable-* directory in your project.</li>
</ul>
<div><div id="wpshdo_28" class="wp-synhighlighter-outer"><div id="wpshdt_28" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Custom XML layout for ListView"></a><a id="wpshat_28" class="wp-synhighlighter-title" href="#Custom XML layout for ListView"  onClick="javascript:wpsh_toggleBlock(28)" title="Click to show/hide code block">Custom XML layout for ListView</a></td><td align="right"><a href="#Custom XML layout for ListView" onClick="javascript:wpsh_code(28)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Custom XML layout for ListView" onClick="javascript:wpsh_print(28)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_28" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">?&gt;</span></span>
&nbsp;
<span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_width</span>=<span class="st0">&quot;fill_parent&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_height</span>=<span class="st0">&quot;fill_parent&quot;</span><span class="re2">&gt;</span></span>
&nbsp;
    <span class="sc3"><span class="re1">&lt;ImageView</span> <span class="re0">android:id</span>=<span class="st0">&quot;@+id/adapter_img&quot;</span></span>
<span class="xtra ln-xtra"><span class="sc3">               <span class="re0">android:src</span>=<span class="st0">&quot;@drawable/ic_launcher&quot;</span></span></span><span class="sc3">               <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></span>
<span class="sc3">               <span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span><span class="re2">/&gt;</span></span>
&nbsp;
<span class="xtra ln-xtra">    <span class="sc3"><span class="re1">&lt;TextView</span> <span class="re0">android:id</span>=<span class="st0">&quot;@+id/adapter_tv&quot;</span></span></span><span class="sc3">            <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></span>
<span class="sc3">            <span class="re0">android:layout_width</span>=<span class="st0">&quot;wrap_content&quot;</span><span class="re2">/&gt;</span></span>
&nbsp;
<span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></pre></div></div></p>
</div>
<ul>
<li>Next in the constructor of the ArrayAdapter class specify the  custom layout resource and the id of the TextView element (adapter_tv) within it as arguments.
<p><div id="attachment_649" class="wp-caption alignright" style="width: 180px"><a href="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/ListView2_demo_with_custom_layout.jpg"><img class="size-medium wp-image-649 " title="ListView2_demo_with_custom_layout" src="http://kannanchandrasekaran.com/wp-content/uploads/2012/03/ListView2_demo_with_custom_layout-213x300.jpg" alt="Android ListView with custom layout" width="170" height="240" /></a><p class="wp-caption-text">ListView with custom layout</p></div></li>
<li>Bind the the adapter using the setListAdapter () method.</li>
<li>To track the user clicks like we did in the previous example, we need to get the reference to the TextView element that was clicked and append its Text to the ClickTracker. However this time, we get our custom layout as the View argument to  the onListItemClick () method instead of the actual TextView element.  So we use the findViewById () method to get the TextView element within it as shown below.</li>
</ul>
<div><div id="wpshdo_29" class="wp-synhighlighter-outer"><div id="wpshdt_29" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Java Code for ListView with Custom Layout"></a><a id="wpshat_29" class="wp-synhighlighter-title" href="#Java Code for ListView with Custom Layout"  onClick="javascript:wpsh_toggleBlock(29)" title="Click to show/hide code block">Java Code for ListView with Custom Layout</a></td><td align="right"><a href="#Java Code for ListView with Custom Layout" onClick="javascript:wpsh_code(29)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Java Code for ListView with Custom Layout" onClick="javascript:wpsh_print(29)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_29" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw2">public</span> <span class="kw2">class</span> ListViewCustomLayout <span class="kw2">extends</span> ListActivity <span class="br0">&#123;</span>
   <span class="kw2">private</span> TextView m_clickTracker<span class="sy0">;</span>
&nbsp;
   @<span class="kw21">Override</span>
   <span class="kw2">protected</span> <span class="kw3">void</span> onCreate<span class="br0">&#40;</span>Bundle savedInstanceState<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw2">super</span>.<span class="me1">onCreate</span><span class="br0">&#40;</span>savedInstanceState<span class="br0">&#41;</span><span class="sy0">;</span>
      setContentView<span class="br0">&#40;</span>R.<span class="me1">layout</span>.<span class="me1">listdemo</span><span class="br0">&#41;</span><span class="sy0">;</span>
      m_clickTracker = <span class="br0">&#40;</span>TextView<span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">listdemo_tv1</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw21">String</span><span class="br0">&#91;</span><span class="br0">&#93;</span> platforms = getResources<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getStringArray</span><span class="br0">&#40;</span>R.<span class="me1">array</span>.<span class="me1">dev_platforms</span><span class="br0">&#41;</span><span class="sy0">;</span>
      ListAdapter listAdapter =
              <span class="kw2">new</span> ArrayAdapter<span class="sy0">&lt;</span>String<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="kw2">this</span>,
<span class="xtra ln-xtra">                                      R.<span class="me1">layout</span>.<span class="me1">img_text_adapter_view</span>,</span><span class="xtra ln-xtra">                                      R.<span class="me1">id</span>.<span class="me1">adapter_tv</span>, platforms<span class="br0">&#41;</span><span class="sy0">;</span></span><span class="xtra ln-xtra">      setListAdapter<span class="br0">&#40;</span>listAdapter<span class="br0">&#41;</span><span class="sy0">;</span></span>   <span class="br0">&#125;</span>
&nbsp;
   @<span class="kw21">Override</span>
   <span class="kw2">protected</span> <span class="kw3">void</span> onListItemClick<span class="br0">&#40;</span><span class="kw117">ListView</span> l, <span class="kw116">View</span> v, <span class="kw3">int</span> position, <span class="kw3">long</span> id<span class="br0">&#41;</span> <span class="br0">&#123;</span>
      <span class="kw21">StringBuilder</span> text = <span class="kw2">new</span> <span class="kw21">StringBuilder</span><span class="br0">&#40;</span>m_clickTracker.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="kw1">if</span> <span class="br0">&#40;</span>text.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
         text.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">&quot;, &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      <span class="br0">&#125;</span>
<span class="xtra ln-xtra">      TextView tv = <span class="br0">&#40;</span>TextView<span class="br0">&#41;</span> v.<span class="me1">findViewById</span><span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">adapter_tv</span><span class="br0">&#41;</span><span class="sy0">;</span></span>      text.<span class="me1">append</span><span class="br0">&#40;</span>tv.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
      m_clickTracker.<span class="me1">setText</span><span class="br0">&#40;</span>text.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
   <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></p>
<div>
<h3><strong>Reusing Views</strong></h3>
<div><strong><br />
</strong></div>
<div>If you take a quick look into the internals of the ArrayAdapter&#8217;s getView () method, among other things you &#8216;ll find the following lines:</div>
<div>     <div id="wpshdo_30" class="wp-synhighlighter-outer"><div id="wpshdt_30" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#Partial code snippet from ArrayAdapter class"></a><a id="wpshat_30" class="wp-synhighlighter-title" href="#Partial code snippet from ArrayAdapter class"  onClick="javascript:wpsh_toggleBlock(30)" title="Click to show/hide code block">Partial code snippet from ArrayAdapter class</a></td><td align="right"><a href="#Partial code snippet from ArrayAdapter class" onClick="javascript:wpsh_code(30)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#Partial code snippet from ArrayAdapter class" onClick="javascript:wpsh_print(30)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_30" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="kw116">View</span> view<span class="sy0">;</span>
TextView text<span class="sy0">;</span>
&nbsp;
<span class="kw1">if</span><span class="br0">&#40;</span>convertView==<span class="kw4">null</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
        view=mInflater.<span class="me1">inflate</span><span class="br0">&#40;</span>resource,parent,<span class="kw4">false</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="br0">&#125;</span> <span class="kw1">else</span><span class="br0">&#123;</span>
         view=convertView<span class="sy0">;</span>
<span class="br0">&#125;</span>
&nbsp;
 <span class="co1">// ...</span></pre></div></div></p>
</div>
<div><strong><br />
</strong></div>
<div>The convertView shown above is the View object that is passed as one of the arguments to the getView() method. The view can be null sometimes  ( such as the first time its called) in which case a new view object is inflated ( i.e created)  using the Inflater class available in android. If its not null, the existing view is reused. This  usually happens when the user scrolls the list and the getView () method is called again for rendering the new set of  elements on the screen.  As a performance optimization, android automatically recycles the views of the rows that are no longer visible on the screen and uses them for rendering the currently viewable elements.  Its recommended to follow the same pattern if you are writing your own Adapters and inflating the views. The performance gain is significant when compared to creating new view objects each time.</div>
</div>
</div>
</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://gurushya.com/android-listview-part-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Android ListView Part1</title>
		<link>http://gurushya.com/android-listview-part1/</link>
		<comments>http://gurushya.com/android-listview-part1/#comments</comments>
		<pubDate>Sun, 26 Feb 2012 17:00:07 +0000</pubDate>
		<dc:creator>Kannan</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[android tutorial]]></category>

		<guid isPermaLink="false">http://kannanchandrasekaran.com/?p=615</guid>
		<description><![CDATA[As the name suggests, ListViews are useful for displaying a scrollable list of items to the user. The items can be of any of the standard types like String or custom user defined types. It lets the users select one or more elements from the list and provides listeners to track change in selections.  But [...]]]></description>
			<content:encoded><![CDATA[<p>As the name suggests, ListViews are useful for displaying a scrollable list of items to the user. The items can be of any of the standard types like String or custom user defined types. It lets the users select one or more elements from the list and provides listeners to track change in selections.  But before we can go into the details  of the ListView and its usage, lets take a quick detour to learn about Adapters in Android.</p>
<h3><strong>Adapters</strong></h3>
<div>Adapters in android provide the input data and help generate the views for each item within the list.  In a abstract sense, they adapt data from disparate sources and provide a common interface for the view elements in Android such as ListViews and Spinners. Hence the name. Android comes with predefined Adapters such as an ArrayAdapter that wraps a Java collection of input items and Cursor adapter that fetches data from the Database,  among others. However you are certainly not restricted to predefined adapters and Android even provides a BaseAdapter class that can be extended for building custom adapters that adapt data from a completely different source such as a webservice. We will be using ArrayAdapters in our demo examples.</div>
<h3><strong>ListView and ListActivity</strong></h3>
<div>To create and display items in a list view, you need to :</div>
<ol>
<li>Declare the ListView element in the XML layout file.</li>
<li>Source the layout in the Activity class using the setContentView  method</li>
<li>Create a Adapter such as an ArrayAdapter to feed the input items to be listed</li>
<li>Bind the adapter to the activity class using the setAdapter () method.</li>
<li>Define the setItemClickListener () method to track the changes to the selections within the list</li>
</ol>
<div>However you can skip a few of the above steps, if the main purpose of your activity is to display the list of items. You can</p>
<div id="attachment_642" class="wp-caption alignright" style="width: 269px"><a href="http://kannanchandrasekaran.com/wp-content/uploads/2012/02/ListView1_demo.jpg"><img class="size-full wp-image-642" title="ListView1_demo" src="http://kannanchandrasekaran.com/wp-content/uploads/2012/02/ListView1_demo.jpg" alt="Demo output for Android ListView" width="259" height="333" /></a><p class="wp-caption-text">Demo output for Android ListView</p></div>
<p>extend your activity from ListActivity class instead of the usual Activity class. ListActivity is a convenience class provided by android to simplify list handling and comes with a default layout that contains a ListView Element.  So if all  you want to do in your activity is to display the ListView items, then you can skip step2 altogether. But if you do want to customize your layout, you should declare your ListView element  with id &#8221;@android:id/list&#8221; ( see example below).</p>
</div>
<div>You can bind the Adapter class with the activity using the setListAdapter method and define the listener by overriding the onListItemClick () method. This method gets called within the callback method provided by the ItemClickListener within the ListActivity class.</div>
<h3><strong>Example</strong></h3>
<div>In this demo example, we are going to create a simple Activity that extends ListActivity class. It contains a ListView element that lists a few strings and track the user selections on a TextView element as shown.</div>
<div>First, define the UI elements within a XML layout file.  Note that we have declared the id of the ListView element as &#8221;@android:id/list&#8221;. This is required to for android to know which is the main list for the activity.</div>
<div><div id="wpshdo_31" class="wp-synhighlighter-outer"><div id="wpshdt_31" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_31"></a><a id="wpshat_31" class="wp-synhighlighter-title" href="#codesyntax_31"  onClick="javascript:wpsh_toggleBlock(31)" title="Click to show/hide code block">XML layout file</a></td><td align="right"><a href="#codesyntax_31" onClick="javascript:wpsh_code(31)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_31" onClick="javascript:wpsh_print(31)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_31" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;?xml</span> <span class="re0">version</span>=<span class="st0">&quot;1.0&quot;</span> <span class="re0">encoding</span>=<span class="st0">&quot;utf-8&quot;</span><span class="re2">?&gt;</span></span>
<span class="sc3"><span class="re1">&lt;LinearLayout</span> <span class="re0">xmlns:android</span>=<span class="st0">&quot;http://schemas.android.com/apk/res/android&quot;</span></span>
<span class="sc3">              <span class="re0">android:orientation</span>=<span class="st0">&quot;vertical&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_width</span>=<span class="st0">&quot;fill_parent&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_height</span>=<span class="st0">&quot;fill_parent&quot;</span><span class="re2">&gt;</span></span>
&nbsp;
    <span class="sc3"><span class="re1">&lt;TextView</span> <span class="re0">android:id</span>=<span class="st0">&quot;@+id/listdemo_tv1&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_width</span>=<span class="st0">&quot;match_parent&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_height</span>=<span class="st0">&quot;wrap_content&quot;</span></span>
<span class="sc3">              <span class="re0">android:text</span>=<span class="st0">&quot;&quot;</span></span>
<span class="sc3">              <span class="re0">android:gravity</span>=<span class="st0">&quot;center&quot;</span><span class="re2">/&gt;</span></span>
&nbsp;
<span class="xtra ln-xtra">    <span class="sc3"><span class="re1">&lt;ListView</span> <span class="re0">android:id</span>=<span class="st0">&quot;@android:id/list&quot;</span></span></span><span class="sc3">              <span class="re0">android:choiceMode</span>=<span class="st0">&quot;multipleChoice&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_width</span>=<span class="st0">&quot;match_parent&quot;</span></span>
<span class="sc3">              <span class="re0">android:layout_height</span>=<span class="st0">&quot;match_parent&quot;</span><span class="re2">/&gt;</span></span>
<span class="sc3"><span class="re1">&lt;/LinearLayout<span class="re2">&gt;</span></span></span></pre></div></div></div>
<div>Second, declare a string array element within the resvaluestrings.xml in the project directory.  Its recommended to declare any Strings used in your project in the Strings.xml file as it makes it easy to adapt your strings later based on the locale of your app.</div>
<div><div id="wpshdo_32" class="wp-synhighlighter-outer"><div id="wpshdt_32" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_32"></a><a id="wpshat_32" class="wp-synhighlighter-title" href="#codesyntax_32"  onClick="javascript:wpsh_toggleBlock(32)" title="Click to show/hide code block">Array declaration in res/layout/strings.xml</a></td><td align="right"><a href="#codesyntax_32" onClick="javascript:wpsh_code(32)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_32" onClick="javascript:wpsh_print(32)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_32" class="wp-synhighlighter-inner" style="display: block;"><pre class="xml" style="font-family:monospace;"><span class="sc3"><span class="re1">&lt;string-array</span> <span class="re0">name</span>=<span class="st0">&quot;dev_platforms&quot;</span><span class="re2">&gt;</span></span>
    <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span>Android<span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span>Iphone<span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span>Windows<span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span>Bada<span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span>
    <span class="sc3"><span class="re1">&lt;item<span class="re2">&gt;</span></span></span>WebOS<span class="sc3"><span class="re1">&lt;/item<span class="re2">&gt;</span></span></span>
<span class="sc3"><span class="re1">&lt;/string-array<span class="re2">&gt;</span></span></span></pre></div></div></p>
</div>
<div>Finally, define the Activity class in the Java.</div>
<div><div id="wpshdo_33" class="wp-synhighlighter-outer"><div id="wpshdt_33" class="wp-synhighlighter-expanded"><table border="0" width="100%"><tr><td align="left" width="80%"><a name="#codesyntax_33"></a><a id="wpshat_33" class="wp-synhighlighter-title" href="#codesyntax_33"  onClick="javascript:wpsh_toggleBlock(33)" title="Click to show/hide code block">Java code for ListViewDemo Activity class </a></td><td align="right"><a href="#codesyntax_33" onClick="javascript:wpsh_code(33)" title="Show code only"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/code.png" /></a>&nbsp;<a href="#codesyntax_33" onClick="javascript:wpsh_print(33)" title="Print code"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/printer.png" /></a>&nbsp;<a href="http://gurushya.com/wp-content/plugins/wp-synhighlight/About.html" target="_blank" title="Show plugin information"><img border="0" style="border: 0 none" src="http://gurushya.com/wp-content/plugins/wp-synhighlight/themes/default/images/info.gif" /></a>&nbsp;</td></tr></table></div><div id="wpshdi_33" class="wp-synhighlighter-inner" style="display: block;"><pre class="java5" style="font-family:monospace;"><span class="xtra ln-xtra"><span class="kw2">public</span> <span class="kw2">class</span> ListViewDemo <span class="kw2">extends</span> ListActivity <span class="br0">&#123;</span></span>&nbsp;
    <span class="kw2">private</span> TextView m_clickTracker<span class="sy0">;</span>
&nbsp;
    @<span class="kw21">Override</span>
    <span class="kw2">protected</span> <span class="kw3">void</span> onCreate<span class="br0">&#40;</span>Bundle savedInstanceState<span class="br0">&#41;</span> <span class="br0">&#123;</span>
        <span class="kw2">super</span>.<span class="me1">onCreate</span><span class="br0">&#40;</span>savedInstanceState<span class="br0">&#41;</span><span class="sy0">;</span>
<span class="xtra ln-xtra">        setContentView<span class="br0">&#40;</span>R.<span class="me1">layout</span>.<span class="me1">listdemo</span><span class="br0">&#41;</span><span class="sy0">;</span></span>        m_clickTracker = <span class="br0">&#40;</span>TextView<span class="br0">&#41;</span> findViewById<span class="br0">&#40;</span>R.<span class="me1">id</span>.<span class="me1">listdemo_tv1</span><span class="br0">&#41;</span><span class="sy0">;</span>
<span class="xtra ln-xtra">        <span class="kw21">String</span><span class="br0">&#91;</span><span class="br0">&#93;</span> platforms = getResources<span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">getStringArray</span><span class="br0">&#40;</span>R.<span class="me1">array</span>.<span class="me1">dev_platforms</span><span class="br0">&#41;</span><span class="sy0">;</span></span><span class="xtra ln-xtra">        ListAdapter listAdapter = <span class="kw2">new</span> ArrayAdapter<span class="sy0">&lt;</span>String<span class="sy0">&gt;</span><span class="br0">&#40;</span><span class="kw2">this</span>, android.<span class="me1">R</span>.<span class="me1">layout</span>.<span class="me1">simple_list_item_1</span>, platforms<span class="br0">&#41;</span><span class="sy0">;</span></span><span class="xtra ln-xtra">        setListAdapter<span class="br0">&#40;</span>listAdapter<span class="br0">&#41;</span><span class="sy0">;</span></span>    <span class="br0">&#125;</span>
&nbsp;
    @<span class="kw21">Override</span>
<span class="xtra ln-xtra">    <span class="kw2">protected</span> <span class="kw3">void</span> onListItemClick<span class="br0">&#40;</span><span class="kw117">ListView</span> l, <span class="kw116">View</span> v, <span class="kw3">int</span> position, <span class="kw3">long</span> id<span class="br0">&#41;</span> <span class="br0">&#123;</span></span>        <span class="kw21">StringBuilder</span> text = <span class="kw2">new</span> <span class="kw21">StringBuilder</span><span class="br0">&#40;</span>m_clickTracker.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="kw1">if</span> <span class="br0">&#40;</span>text.<span class="me1">length</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span>
            text.<span class="me1">append</span><span class="br0">&#40;</span><span class="st0">&quot;, &quot;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        <span class="br0">&#125;</span>
        TextView tv = <span class="br0">&#40;</span>TextView<span class="br0">&#41;</span> v<span class="sy0">;</span>
        text.<span class="me1">append</span><span class="br0">&#40;</span>tv.<span class="me1">getText</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
        m_clickTracker.<span class="me1">setText</span><span class="br0">&#40;</span>text.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
    <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></div></div></p>
</div>
<ul>
<li>Our ListViewDemo extends from ListActivity class</li>
<li>setContentView () method is used to source the layout within the Activity. This is done because  we have customized the layout with a TextView element to track user selections. If our layout were to say, just contain the ListView element, we can skip this step.</li>
<li>We use the getResources ()  method that is available within the Activity to get hold of the string array that we declared above and pass it as input to the ArrayAdapter class. This version of the ArrayAdapter&#8217;s constructor takes the following arguments:</li>
<li>
<ul>
<li>Context that provides access to environment data like local files, databases, system services etc. This is usually the Activity itself.</li>
<li>Layout file that represents a TextView element. By default, the ArrayAdapter converts the items within, into a String object ( using toString () ) and wraps it with the layout specified. This layout controls the appearance of the list elements on the screen. In this case we use one of the predefined layouts,  android.R.layout.simple_list_item_1 which represents a singe line TextView element. Android allows us to provide our own layouts to customize the look and feel.</li>
<li>The input list of items, in this case our string array.</li>
</ul>
</li>
<li>Call the setListAdapter () method to bind the Adapter to the ListActivity.</li>
<li>Define the action to take when the user clicks on a item in the list by overriding the onListItemClick() method. The ListView itself , the view, position  and the id of the element that was clicked are available as arguments to this callback method.  We cast the view that was passed into a TextView element, grab its text and append it to the clickTracker which is nothing but the TextView element that we defined in the xml layout file.</li>
</ul>
<div>Note that this is the<a href="http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller"> Model-View-Controller pattern</a> in action. The ArrayAdapter supplies the underlying data ( Model) for the ListView (view) and the activity (the controller) communicates any changes to the underlying data (the user interaction) to the View which gets re-drawn.</div>
]]></content:encoded>
			<wfw:commentRss>http://gurushya.com/android-listview-part1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
