DEV'S

Shopping List App Version 2.1 - Alert Dialog Addon

Project Structure

Add an item

Edit and Delete options in Context Menu (on long pressing listview item)

Edit item (Notice the button name changed to Edit)

When Delete is selected from context menu Alert Dialog is shown for additional protection.

ShoppingListActivity.java

package dev.shopping.list;

import java.util.ArrayList;
import java.util.HashMap;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.dev.util.Utility;

public class ShoppingListActivity extends Activity {

	private SimpleAdapter adapter;
	private ArrayList<HashMap<String, Object>> items = new ArrayList<HashMap<String, Object>>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.shoppinglist_activity);
		setTitle("Welcome");
		ListView itemList = (ListView) findViewById(R.id.itemlist);
		itemList.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> parent, View view,
					int position, long id) {
				// TODO Auto-generated method stub
				Intent intent = new Intent(getBaseContext(), ItemActivity.class);
				intent.putExtra(Utility.ITEM_ID, (Double) items.get(position)
						.get(Utility.ITEM_ID));
				intent.putExtra(Utility.ITEM_NAME, (String) items.get(position)
						.get(Utility.ITEM_NAME));
				intent.putExtra(Utility.ITEM_QTY, (Double) items.get(position)
						.get(Utility.ITEM_QTY));
				intent.putExtra(Utility.ITEM_PRICE, (Double) items
						.get(position).get(Utility.ITEM_PRICE));
				intent.putExtra(Utility.ITEM_NOTES, (String) items
						.get(position).get(Utility.ITEM_NOTES));
				intent.putExtra(Utility.ITEM_INDEX, Utility.ITEM_READONLY);
				startActivity(intent);
			}
		});
		items = Utility.getArrayFromJson(this);
		adapter = new SimpleAdapter(this, items, R.layout.list_item,
				new String[] { Utility.ITEM_NAME, Utility.ITEM_QTY },
				new int[] { R.id.i_name, R.id.i_qty });
		itemList.setAdapter(adapter);

		registerForContextMenu(itemList);
	}

	@Override
	public void onCreateContextMenu(ContextMenu menu, View v,
			ContextMenuInfo menuInfo) {
		// TODO Auto-generated method stub
		menu.add(Menu.NONE, Utility.ITEM_EDIT, 0,
				getResources().getString(R.string.item_edit_menu));
		menu.add(Menu.NONE, Utility.ITEM_DELETE, 0,
				getResources().getString(R.string.item_delete_menu));
		super.onCreateContextMenu(menu, v, menuInfo);
	}

	@Override
	public boolean onContextItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
				.getMenuInfo();
		switch (item.getItemId()) {
		case Utility.ITEM_EDIT:
			// Utility.displayMessage(this,
			// (String) items.get(info.position).get(Utility.ITEM_NAME));
			Intent intent = new Intent(this, ItemActivity.class);
			intent.putExtra(Utility.ITEM_ID, (Double) items.get(info.position)
					.get(Utility.ITEM_ID));
			intent.putExtra(Utility.ITEM_NAME, (String) items
					.get(info.position).get(Utility.ITEM_NAME));
			intent.putExtra(Utility.ITEM_QTY, (Double) items.get(info.position)
					.get(Utility.ITEM_QTY));
			intent.putExtra(Utility.ITEM_PRICE,
					(Double) items.get(info.position).get(Utility.ITEM_PRICE));
			intent.putExtra(Utility.ITEM_NOTES,
					(String) items.get(info.position).get(Utility.ITEM_NOTES));
			intent.putExtra(Utility.ITEM_INDEX, info.position);
			startActivityForResult(intent, Utility.EDIT_ITEM_REQ_CODE);
			break;
		case Utility.ITEM_DELETE:
			displayAlertDialog(info.position);

			break;
		default:
			break;
		}

		return super.onContextItemSelected(item);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// TODO Auto-generated method stub
		getMenuInflater().inflate(R.menu.shoppinglist_menu, menu);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		switch (requestCode) {
		case Utility.ADDITEM_REQ_CODE:
			if (resultCode == Utility.ADDITEM_RESULT_CODE) {
				Utility.displayMessage(this, getString(R.string.success_toast));
				Bundle extras = data.getExtras();
				if (extras.getDouble(Utility.ITEM_ID) == Utility.ITEM_NEW) {

					HashMap<String, Object> map = new HashMap<String, Object>();
					map.put(Utility.ITEM_NAME,
							extras.getString(Utility.ITEM_NAME));
					map.put(Utility.ITEM_QTY,
							extras.getDouble(Utility.ITEM_QTY));
					map.put(Utility.ITEM_PRICE,
							extras.getDouble(Utility.ITEM_PRICE));
					map.put(Utility.ITEM_NOTES,
							extras.getString(Utility.ITEM_NOTES));
					map.put(Utility.ITEM_ID, Math.random());
					items.add(map);

					String json = Utility.convertArrayToJson(this, items);
					Utility.saveList(this, json);
					Log.w("JSON", json);
					adapter.notifyDataSetChanged();

				}
			} else {
				Utility.displayMessage(this,
						getResources().getString(R.string.noitem_toast));
			}
			break;
		case Utility.EDIT_ITEM_REQ_CODE:
			if (resultCode == Utility.EDIT_ITEM_RESULT_CODE) {
				Bundle extras = data.getExtras();
				HashMap<String, Object> map = new HashMap<String, Object>();
				map.put(Utility.ITEM_NAME, extras.getString(Utility.ITEM_NAME));
				map.put(Utility.ITEM_QTY, extras.getDouble(Utility.ITEM_QTY));
				map.put(Utility.ITEM_PRICE,
						extras.getDouble(Utility.ITEM_PRICE));
				map.put(Utility.ITEM_NOTES,
						extras.getString(Utility.ITEM_NOTES));
				map.put(Utility.ITEM_ID, extras.getDouble(Utility.ITEM_ID));
				items.set(extras.getInt(Utility.ITEM_INDEX), map);
				String json = Utility.convertArrayToJson(this, items);
				Utility.saveList(this, json);
				adapter.notifyDataSetChanged();
			} else {
				Utility.displayMessage(this,
						getResources().getString(R.string.noedit_toast));
			}
			break;
		default:
			break;
		}
	}

	private void displayAlertDialog(final int position) {

		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle(R.string.alert_title);
		builder.setMessage(R.string.alert_msg);
		builder.setPositiveButton(R.string.alert_delete,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						//
						items.remove(position);
						String json = Utility.convertArrayToJson(
								ShoppingListActivity.this, items);
						Utility.saveList(ShoppingListActivity.this, json);
						adapter.notifyDataSetChanged();
					}
				});
		builder.setNegativeButton(R.string.alert_cancel,
				new DialogInterface.OnClickListener() {

					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub

					}
				});
		AlertDialog alertDialog = builder.create();
		alertDialog.show();
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// TODO Auto-generated method stub
		switch (item.getItemId()) {
		case R.id.additem:
			Intent intent = new Intent(this, ItemActivity.class);
			startActivityForResult(intent, Utility.ADDITEM_REQ_CODE);
			break;
		case R.id.myaccount:

			break;
		case R.id.settings:

			break;
		case R.id.aboutus:

			break;
		default:
			break;
		}

		return super.onOptionsItemSelected(item);
	}

}

ItemActivity.java

package dev.shopping.list;

import com.dev.util.Utility;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class ItemActivity extends Activity {

	private EditText itemName;
	private EditText itemQty;
	private EditText itemPrice;
	private EditText itemNotes;
	private double item_id = Utility.ITEM_NEW;
	private int item_position = Utility.ITEM_NEW;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.item_activity);
		setTitle(getResources().getString(R.string.item_add));
		itemName = (EditText) findViewById(R.id.itemname);
		itemQty = (EditText) findViewById(R.id.itemqty);
		itemPrice = (EditText) findViewById(R.id.itemprice);
		itemNotes = (EditText) findViewById(R.id.itemnotes);
		Button save = (Button) findViewById(R.id.save);

		Bundle extras = getIntent().getExtras();
		if (extras != null) {
			save.setText(getResources().getString(R.string.item_edit_menu));
			setTitle(getResources().getString(R.string.item_edit));
			itemName.setText(extras.getString(Utility.ITEM_NAME));
			itemQty.setText(Double.toString(extras.getDouble(Utility.ITEM_QTY)));
			itemPrice.setText(Double.toString(extras
					.getDouble(Utility.ITEM_PRICE)));
			itemNotes.setText(extras.getString(Utility.ITEM_NOTES));
			item_id = extras.getDouble(Utility.ITEM_ID);
			if (extras.getInt(Utility.ITEM_INDEX) == Utility.ITEM_READONLY){
				save.setVisibility(Button.GONE);
				setTitle(getResources().getString(R.string.item_view));
			}else{
				item_position = extras.getInt(Utility.ITEM_INDEX);
			}
			
		}
		save.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				if (itemName.getText().toString().length() > 0
						&& itemQty.getText().toString().length() > 0
						&& itemPrice.getText().toString().length() > 0
						&& itemNotes.getText().toString().length() > 0) {
					Intent intent = new Intent();
					intent.putExtra(Utility.ITEM_NAME, itemName.getText()
							.toString());
					intent.putExtra(Utility.ITEM_QTY,
							Double.parseDouble(itemQty.getText().toString()));
					intent.putExtra(Utility.ITEM_PRICE,
							Double.parseDouble(itemPrice.getText().toString()));
					intent.putExtra(Utility.ITEM_NOTES, itemNotes.getText()
							.toString());
					intent.putExtra(Utility.ITEM_ID, item_id);
					if (item_id == Utility.ITEM_NEW) {
						setResult(Utility.ADDITEM_RESULT_CODE, intent);
					} else {
						intent.putExtra(Utility.ITEM_INDEX, item_position);
						setResult(Utility.EDIT_ITEM_RESULT_CODE, intent);
					}
					finish();
				} else {
					Utility.displayMessage(ItemActivity.this,
							"Empty fields not allowed!!");
				}
			}
		});
	}
}

Utility.java

package com.dev.util;

import java.util.ArrayList;
import java.util.HashMap;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.preference.PreferenceManager;
import android.util.Log;
import android.widget.Toast;

public class Utility {
	public static final int ADDITEM_REQ_CODE = 1334;
	public static final int ADDITEM_RESULT_CODE = 1335;
	public static final int EDIT_ITEM_REQ_CODE = 1336;
	public static final int EDIT_ITEM_RESULT_CODE = 1337;
	public static final String ITEM_INDEX = "item_index";
	public static final String ITEM_NAME = "item_name";
	public static final String ITEM_QTY = "item_qty";
	public static final String ITEM_PRICE = "item_price";
	public static final String ITEM_NOTES = "item_notes";
	public static final String ITEM_ID = "item_id";
	public static final String ITEM_DATA_FULL = "item_data_full";
	public static final String ITEM_DATA_DEFAULT_VALUE = "[]";
	public static final int ITEM_NEW = -1;
	public static final int ITEM_EDIT = 324;
	public static final int ITEM_DELETE = 325;
	public static final int ITEM_READONLY = 326;

	public static void displayMessage(Context context, String text) {
		Toast.makeText(context, text, Toast.LENGTH_LONG).show();
	}

	public static void saveList(Context context, String jsonObject) {
		Editor ed = PreferenceManager.getDefaultSharedPreferences(context)
				.edit();
		ed.putString(ITEM_DATA_FULL, jsonObject);
		ed.commit();
	}

	public static String getList(Context context) {
		SharedPreferences sp = PreferenceManager
				.getDefaultSharedPreferences(context);
		String outPut = sp.getString(ITEM_DATA_FULL, ITEM_DATA_DEFAULT_VALUE);
		Log.d(ITEM_DATA_FULL, outPut);
		return outPut;
	}

	public static String convertArrayToJson(Context context,
			ArrayList<HashMap<String, Object>> items) {
		JSONArray jsonArray = new JSONArray();
		for (int i = 0; i < items.size(); i++) {
			JSONObject jsonObject = new JSONObject();
			try {
				jsonObject.put(ITEM_ID, (Double) items.get(i).get(ITEM_ID));
				jsonObject.put(ITEM_NAME, (String) items.get(i).get(ITEM_NAME));
				jsonObject.put(ITEM_QTY, (Double) items.get(i).get(ITEM_QTY));
				jsonObject.put(ITEM_PRICE, (Double) items.get(i)
						.get(ITEM_PRICE));
				jsonObject.put(ITEM_NOTES, (String) items.get(i)
						.get(ITEM_NOTES));
				jsonArray.put(jsonObject);
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		return jsonArray.toString();
	}

	public static ArrayList<HashMap<String, Object>> getArrayFromJson(
			Context context) {
		String json = getList(context);
		ArrayList<HashMap<String, Object>> items = new ArrayList<HashMap<String, Object>>();
		try {
			JSONArray jsonArray = new JSONArray(json);
			for (int i = 0; i < jsonArray.length(); i++) {
				HashMap<String, Object> map = new HashMap<String, Object>();
				map.put(ITEM_ID, jsonArray.getJSONObject(i).getDouble(ITEM_ID));
				map.put(ITEM_NAME,
						jsonArray.getJSONObject(i).getString(ITEM_NAME));
				map.put(ITEM_QTY, jsonArray.getJSONObject(i)
						.getDouble(ITEM_QTY));
				map.put(ITEM_PRICE,
						jsonArray.getJSONObject(i).getDouble(ITEM_PRICE));
				map.put(ITEM_NOTES,
						jsonArray.getJSONObject(i).getString(ITEM_NOTES));
				items.add(map);
			}
		} catch (JSONException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return items;
	}
}

shoppinglist_activity.xml

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

    <TextView
        android:id="@+id/instruction"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="@string/instruction" />

    <ListView
        android:id="@+id/itemlist"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

item_activity.xml

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <EditText
            android:id="@+id/itemname"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:hint="@string/enteritemname"
            android:inputType="text" />

        <EditText
            android:id="@+id/itemqty"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:hint="@string/enteritemqty"
            android:inputType="number" />

        <EditText
            android:id="@+id/itemprice"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_margin="10dp"
            android:hint="@string/enteritemcost"
            android:inputType="numberDecimal" />

        <EditText
            android:id="@+id/itemnotes"
            android:layout_width="match_parent"
            android:layout_height="100dp"
            android:layout_margin="10dp"
            android:hint="@string/enteritemnotes"
            android:inputType="text" />

        <Button
            android:id="@+id/save"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:text="@string/save" />
    </LinearLayout>

</ScrollView>

list_item.xml

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

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:orientation="vertical" 
        android:layout_marginLeft="10dp"
        >

        <TextView
            android:id="@+id/i_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/item_name_placeholder"
            android:textColor="#DF0101"
            android:textSize="20sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/i_qty"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="right"
            android:padding="5dp"
            android:text="@string/item_qty_placeholder"
            android:textColor="#04B431" />
    </LinearLayout>

    <ImageView
        android:layout_width="0dp"
        android:layout_height="50dp"
        android:layout_weight="1"
        android:contentDescription="@string/app_name"
        android:src="@drawable/icon" />

</LinearLayout>

shoppinglist_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/additem"
        android:title="@string/additem"/>
    <item
        android:id="@+id/myaccount"
        android:title="@string/myaccount"/>
    <item
        android:id="@+id/settings"
        android:title="@string/settings"/>
    <item
        android:id="@+id/aboutus"
        android:title="@string/aboutus"/>

</menu>

strings.xml

<resources>

    <string name="app_name">ShoppingList2.1</string>
    <string name="instruction">Press Menu to Add an Item</string>
    <string name="additem">Add Item</string>
    <string name="myaccount">My Account</string>
    <string name="settings">Settings</string>
    <string name="aboutus">About</string>
    <string name="enteritemname">Enter Item name here</string>
    <string name="enteritemqty">Enter Item Qty</string>
    <string name="enteritemcost">Enter Item cost here</string>
    <string name="enteritemnotes">Additional notes here</string>
    <string name="save">Save</string>
    <string name="item_name_placeholder">Item Name here</string>
    <string name="item_qty_placeholder">Qty here</string>
    <string name="item_add">Add new item here!</string>
    <string name="item_edit">Edit item here!</string>
    <string name="item_view">Item Info</string>
    <string name="item_edit_menu">Edit</string>
    <string name="item_delete_menu">Delete</string>
    <string name="success_toast">Item successfully added!</string>
    <string name="noitem_toast">User did not add any item!</string>
    <string name="noedit_toast">User did not Edit any item!</string>
    <string name="alert_title">Alert!!!</string>
    <string name="alert_msg">Do you really want to delete this entry?</string>
    <string name="alert_delete">Delete</string>
    <string name="alert_cancel">Cancel</string>
</resources>

AndroidManifest.xml

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="dev.shopping.list"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity android:name=".ShoppingListActivity" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".ItemActivity" />
    </application>

</manifest>

Android

2018-11-27 21:26:06
1) Android Videos
2018-07-09 06:40:27
2) 09 Jul - Classroom Videos
2018-07-06 21:15:16
3) Recommended Videos
2018-07-06 21:00:45
4) Classroom Videos
2018-06-21 23:15:31
5) ViewPager TabStrip - TabLayout
2018-06-21 22:19:12
6) AsyncTask Filedownload
2018-06-21 19:54:27
7) Service Connection - Bind Service
2018-06-21 03:08:05
8) Instrumentation Test
2018-06-20 22:10:24
9) ApiDoc - Shopping List App
2018-06-20 22:08:56
10) AsyncTask - PreferenceManager - Example
2018-06-20 20:02:07
11) Fragments - RecyclerView Examples UnitTesting- Part 4
2018-06-20 19:59:57
12) Fragments - RecyclerView Examples -Database - Part 3
2018-06-20 19:59:00
13) Fragments - RecyclerView Examples - Part 2
2018-06-20 19:52:33
14) Fragments - RecyclerView Examples - Part 1
2018-06-19 23:52:14
15) Customize Adapter Example
2018-06-19 22:58:07
16) SimpleAdapter - HashMap Data Type
2018-06-19 03:39:01
17) ListView Add-Edit Example
2018-06-19 02:25:02
18) OptionMenu - Background - Shape
2018-06-18 23:53:27
19) SetActivityForResult Example
2018-06-18 21:33:01
20) Android Button Event
2018-06-18 03:19:58
21) Android Calculator View - Activity LifeCycle
2018-06-15 02:59:14
22) ViewPager - TabLayout Example
2018-06-15 00:14:08
23) Broadcast Receiver SMSManager
2018-06-14 22:58:22
24) Android Location Aware Apps - OnScreen Permission
2018-06-14 05:13:06
25) Sqlite Example - SimpleCursor Adapter
2018-06-14 03:03:36
26) Fragment - NavigationDrawer Example
2018-06-13 22:51:12
27) WebService POST
2018-06-13 05:07:48
28) WebService GET Example
2018-06-13 03:26:20
29) Service - Broadcast Receiver - SimpleAdapter
2018-06-12 23:00:54
30) ListView Add Edit Delete
2018-06-12 04:40:31
31) Background - SharedPreferences
2018-06-12 03:15:15
32) ActionBar - Option Menu
2018-06-12 01:05:30
33) RelativeLayout - ScrollView - Intent -Bundle
2018-06-11 03:38:21
34) Calculator App - Part 2
2018-06-11 00:19:59
35) Calculator Layout - Part 1
2018-05-15 03:07:50
36) Kotlin - Functional Programming Best Practices
2018-05-15 01:10:02
37) Shopping App - Kotlin - Companion Object
2018-05-14 23:51:41
38) Shopping App - Kotlin - Java SAM Interface To Lambda
2018-05-14 20:58:14
39) ShoppingList App - Api Doc
2018-05-14 01:03:11
40) Kotlin - Activities - UI Building - WebService - AsyncTask
2018-05-13 23:53:26
41) Kotlin Classes - Inheritance
2018-01-24 01:18:09
42) IOS - Performance Tuning - Best Practices
2018-01-24 00:07:33
43) Google API Pricing Plan
2018-01-24 00:03:21
44) Firebase Integration - App Analytics
2018-01-23 03:39:46
45) Profiling - Best Practices - Service - Broadcast Receiver - Document -PDF
2018-01-23 03:24:36
46) Broadcast Receiver - Profiling - Unregister - Reduce Memory Leak
2018-01-23 00:20:06
47) Background Service - Use Of LocationListener - Run Time Permission Check - Best Practice
2018-01-22 22:39:07
48) Android Memory Profiling - Performance Improvement - Handler - Runnable
2018-01-22 21:24:46
49) Android Performance Improvement Techniques - PDF Document
2018-01-22 04:50:44
50) Best Practice To Add Smooth View Pan And Communicate Between Activities
2018-01-22 02:50:35
51) Layout Technique - Activity LifeCycle
2017-12-11 05:23:14
52) ShoppingList App - Fragment - Part 5
2017-12-11 05:08:05
53) Feedback
2017-12-11 03:25:52
54) ShoppingList App - RecyclerView - Part 4
2017-12-11 00:27:38
55) ShoppingList App - DrawerLayout - Part 3 - Drawables - Menus - Gradle Configs
2017-12-11 00:23:30
56) ShoppingList App - DrawerLayout - Part 2 - Layouts
2017-12-11 00:20:50
57) ShoppingList App - DrawerLayout - Part 1
2017-12-10 21:17:56
58) ShoppingList App - Api Calls
2017-12-08 03:32:57
59) App - AsyncTast Part 2
2017-12-08 01:32:57
60) App - AsyncTast Part 1
2017-12-07 23:06:12
61) WebService GET - JSON Parsing
2017-12-07 04:51:25
62) Service And Broadcast Receiver
2017-12-06 22:49:06
63) Sqlite DB Example - ListView - Complex Form
2017-12-06 00:23:16
64) ListView - Adapters
2017-12-05 22:44:14
65) ActionBar Option Menu
2017-12-05 03:22:37
66) Multiple Activities
2015-11-19 02:45:01
67) Generate APK
2015-11-18 09:47:41
68) ShoppingList - Cloud App - WebService POST - Final
2015-11-17 13:29:54
69) Creating Swipe Views With Tabs Using ViewPager And TabLayout
2015-11-17 08:00:24
70) TabHost Using Fragment
2015-11-17 03:41:10
71) ShoppingList - Cloud App - WebService POST Example
2015-11-16 03:02:07
72) Camera - Gallery - Intent Calling - Customised Adapter
2015-11-13 08:36:20
73) Android Broadcast Receiver - SMS And Call
2015-11-12 13:17:25
74) WebService Example - HttpURLConnection Example
2015-11-12 13:11:57
75) Android Location Services - Foreground And Background Example
2015-11-11 23:04:58
76) ShoppingList App - Sqlite
2015-11-09 23:23:00
77) ShoppingList App - Continued
2015-11-09 04:09:50
78) ListView - ShoppingList App
2015-11-08 22:23:23
79) Android Layouts - Revisit
2015-03-25 04:05:46
80) Overriding Theme - ActionBar And Tab
2015-03-14 02:45:58
81) SMSReplier - V1.0 - Service - Intent Share - Phone - WhiteList - ReplyLog Addon - Part4
2015-03-14 02:44:07
82) SMSReplier - V1.0 - Service - Intent Share - Phone - WhiteList - ReplyLog Addon - Part3
2015-03-14 02:34:48
83) SMSReplier - V1.0 - Service - Intent Share - Phone - WhiteList - ReplyLog Addon - Part2
2015-03-14 02:30:01
84) SMSReplier - V1.0 - Service - Intent Share - Phone - WhiteList - ReplyLog Addon - Part1
2015-03-12 02:04:35
85) SMSReplier - V1.0 - Broadcast Receiver - Foreground Notification - Persistency Add-on - Part 2
2015-03-12 01:59:08
86) SMSReplier - V1.0 - Broadcast Receiver - Foreground Notification - Persistency Add-on - Part 1
2015-03-11 01:24:43
87) WebService -HTTP GET - AsyncTask - XML Parsing
2015-03-10 01:22:20
88) GoogleMap V2 - LocationListener - GPS
2015-03-09 01:51:33
89) SMS And Call Broadcast Receiver
2015-03-06 01:25:52
90) WebService - HTTP POST - AsyncTask - JSON Parsing
2015-03-05 01:18:38
91) WebService Introduction - GET - AsyncTask - JSON Parsing
2015-03-04 00:39:34
92) AsyncTask Example - Loading Image From Server
2015-03-03 00:15:21
93) SqliteDB Integration - SMSReplier V1.0 - Continued
2015-03-02 01:39:20
94) SMSList - Compose Fragment - FragmentBackStack - SMSReplier V1.0 - Continued...
2015-02-28 00:45:24
95) Post Login - DrawerLayout - Menu System - SMSReplier V1.0 Continued
2015-02-27 01:26:30
96) ViewPager - Tab - PreferenceManager Add On - Moving Everything To Fragment -SMSReplier V1.0 Continued
2015-02-25 02:56:09
97) Camera - Bitmap Add On - SMSReplier V1.0 - Continued
2015-02-25 01:29:05
98) SMSReplier - V1.0 - Registration Form
2015-02-24 03:56:38
99) Introduction To Service And BroadcastReceiver - IntentFilter
2015-02-23 00:57:08
100) Communicating Fragments - Bundle - Interface
2015-02-20 02:01:03
101) Navigation Drawer - Fragment Indroduction
2015-02-18 00:40:37
102) ListView - CustomAdapter With ViewHolder
2015-02-18 00:37:09
103) ListView - SimpleCursorAdapter Example
2015-02-16 04:13:55
104) ListView With SqliteDB - Add -Edit - Delete - Retrive
2015-02-13 23:07:36
105) OptionsMenu And ContextMenu With ListView
2015-02-13 01:40:46
106) ArrayAdapter And SimpleAdapter - ListView Example
2015-02-11 04:22:29
107) Forward And Reverse Bundling Objects Between Activities
2015-02-11 00:16:14
108) Bundle - Parceling Objects Between Activities
2015-02-10 00:34:05
109) ScrollView - PreferenceManager
2015-02-09 03:49:48
110) MultiActivity - AndroidManifest - Intent Introduction
2015-02-09 00:33:52
111) ClickListeners - Object Initialisation - Toast
2015-02-08 23:35:56
112) Bitmap From SD Card
2015-02-07 03:26:37
113) Android Layout Tricks - RelativeLayout
2015-02-06 23:04:29
114) Android Layout Tricks - LinearLayout
2015-02-05 20:47:58
115) UI Stack And Activity LifeCycle
2015-02-04 21:04:55
116) Working With Android Studio
2015-02-04 20:52:49
117) Java - OOP Concept - A Revisit
2014-12-08 22:11:38
118) Maintaining Login State - A Simple Approach
2014-12-07 21:03:53
119) 9 Patch Image Background
2014-12-05 04:25:48
120) WebService - JSON Example From 10.0.2.2 - Localhost
2014-12-03 03:30:10
121) VideoView - Media Controller
2014-12-03 02:52:15
122) Google Map V2 - Location Listener - Display Current Location - Check GPS Status
2014-12-02 23:12:16
123) Google Map V2 Integration
2014-12-02 04:22:51
124) Implicit Intent MIME Type - Camera - Gallery
2014-12-01 23:41:14
125) Camera - Implicit Intent - External Storage Example
2014-12-01 03:01:45
126) WebService - Google Map API WebService Example
2014-11-27 04:22:52
127) Google API Key, KeyStore, Certificate SHA1 Fingerprints
2014-11-27 03:59:46
128) Navigation Drawer - ActionBarDrawerToggle Example
2014-11-26 03:39:20
129) Notification From Service
2014-11-25 03:33:52
130) WebView Example
2014-11-24 00:37:52
131) Saving Item State - Fragment Master Detail Flow Final
2014-11-23 11:43:21
132) Package - Apk Suppress Lint Error
2014-11-21 22:49:09
133) AsyncTask Introduction - Load Image from URL
2014-11-21 05:15:40
134) GridView Example
2014-11-21 03:44:34
135) Location Aware Apps - GPS_PROVIDER - NETWORK_PROVIDER - Introduction
2014-11-20 03:20:22
136) SMSReplier Ver1.3 With Broadcast Receiver
2014-11-19 03:25:18
137) SMSReplier Ver1.2 Using Fragments And SQLite
2014-11-18 05:10:34
138) SMSReplier Ver1.1 Using Fragments - A Modular Approach
2014-11-17 05:21:15
139) ActionBar Tab - Fragment - ViewPager - Lisview - Compose Message
2014-11-15 04:43:26
140) APK - Android Application Package Process
2014-11-15 03:43:55
141) View Fragment And Pager - An Image Gallery Example
2014-11-13 04:07:42
142) Button,Checkbox With Image Background
2014-11-12 04:49:54
143) SMSReplier Ver1.0
2014-11-12 03:10:49
144) BroadcastReceiver With Permission
2014-11-11 03:06:20
145) BroadcastReceiver - Service - Example
2014-11-10 05:21:10
146) Background Service Example
2014-11-10 03:47:35
147) Runtime UI View Generation
2014-11-10 03:30:14
148) Shopping List App Version 3.1 - Shopping Object - Shopping Adapter - Custom Data View Binding
2014-11-10 00:01:53
149) Spinner Example - Dropdown - ArrayAdapter
2014-11-08 01:20:13
150) Shopping List App Version 3.0 - SQlite - CRUD
2014-11-07 03:16:33
151) Shopping List App Version 2.9 - SQlite - SimpleCursorAdapter
2014-11-06 03:08:08
152) Shopping List App Version 2.2 - JSONAdapter (custom) Addon
2014-11-05 04:12:28
153) Customising Adapter From BaseAdapter
2014-11-04 04:46:19
154) Shopping List App Version 2.1 - Alert Dialog Addon
2014-11-04 01:25:04
155) Shopping List App Version 2.1 - View-Edit-Delete Addon
2014-11-03 03:16:51
156) Json Revisit
2014-11-02 23:07:09
157) PreferenceManager Revisit
2014-10-31 03:19:16
158) Shopping List App Version 2.0 - PreferenceManager Add On - Save List
2014-10-30 03:42:19
159) Shopping List App Version 1.0 - Menu-onActivityResult-ListActivity
2014-10-30 02:18:46
160) SharedPreference Example
2014-10-29 22:17:27
161) Option Menu And Context Menu Example
2014-10-29 02:57:14
162) MultiActivity With OnActivityResult Example
2014-10-28 03:09:56
163) Bundle Example
2014-10-27 03:06:53
164) ListView - SimpleAdapter Example
2014-10-27 01:35:15
165) CoreJava Questions & Answers
2014-10-26 22:37:58
166) ListView - ArrayAdapter Example - Continued
2014-10-25 03:32:33
167) ListView - ArrayAdapter Example
2014-10-25 00:18:15
168) Calculator App
2014-10-23 03:14:37
169) Calculator Layout
2014-10-23 00:01:20
170) Event-listeners Example
2014-10-21 03:45:26
171) Android MultiActivity Example
2014-10-20 23:05:09
172) Activity Life Cycle Example
2014-10-20 23:03:17
173) Inheritance Scenario Wrt To Activity
2014-10-20 05:17:13
174) Android HelloWorld From Base
2014-10-20 01:49:59
175) Java Array And ArrayList
2014-10-19 23:06:25
176) Java Basics 1
2014-10-18 05:03:46
177) Hello World Java

© Vasudev.H / Email: tech3in@live.com