Friday 6 December 2013

fragment onlick listener.

public class StartFragment extends Fragment implements 
OnClickListener{

    @Override
    public View onCreateView(LayoutInflater inflater, 
ViewGroup container,
            Bundle savedInstanceState) {

        View v = inflater.inflate(R.layout.fragment_start, 
container, false);

        Button b = (Button) v.findViewById(R.id.StartButton);
        b.setOnClickListener(this);
        return v;
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.StartButton:

            ...

            break;
        }
    }
}

Wednesday 30 October 2013

pinned listview in android with onclick listener

activity_main.xml



<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

   <com.hb.views.PinnedSectionListView android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:id="@+id/lll"></com.hb.views.PinnedSectionListView>

</RelativeLayout>

MainActivity.java
package com.example.pinnedlistview;

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.hb.views.PinnedSectionListView;
import com.hb.views.PinnedSectionListView.PinnedSectionListAdapter;

public class MainActivity extends Activity {
 
 PinnedSectionListView lv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        
        lv = (PinnedSectionListView)findViewById(R.id.lll);
        
        lv.setAdapter(new MyPinnedSectionListAdapter(this, android.R.layout.simple_list_item_1, android.R.id.text1, prepareItems()));
        
        lv.setOnItemClickListener(new OnItemClickListener() {

   @Override
   public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
     long arg3) {
    
    Toast.makeText(MainActivity.this,"POsition : "+arg2,Toast.LENGTH_SHORT).show();
    
    
   }
  });
        
        
    }


 private static class MyPinnedSectionListAdapter extends ArrayAdapter<Item> implements PinnedSectionListAdapter {
  
  private static final int[] COLORS = new int[] {
   android.R.color.holo_green_light, android.R.color.holo_orange_light,
   android.R.color.holo_blue_light, android.R.color.holo_red_light };
  
  public MyPinnedSectionListAdapter(Context context, int resource, int textViewResourceId, List<Item> objects) {
   super(context, resource, textViewResourceId, objects);
  }
  
  @Override public View getView(int position, View convertView, ViewGroup parent) {
   TextView view = (TextView) super.getView(position, convertView, parent);
   view.setTextColor(Color.DKGRAY);
   if (getItem(position).type == Item.SECTION) {
    view.setBackgroundColor(parent.getResources().getColor(COLORS[position % COLORS.length]));
   }
   return view;
  }
  
  @Override public int getViewTypeCount() {
   return 2;
  }
  
  @Override public int getItemViewType(int position) {
   return getItem(position).type;
  }

  @Override public boolean isItemViewTypePinned(int viewType) {
   return viewType == Item.SECTION;
  }
 }
 private static class Item {
  public static final int ITEM = 0;
  public static final int SECTION = 1;
  
  public final int type;
  public final String text;
  
  public Item(int type, String text) {
   this.type = type;
   this.text = text;
  }
  
  @Override public String toString() {
   return text;
  }
 }
 
 private static ArrayList<Item> prepareItems() {
  ArrayList<Item> result = new ArrayList<Item>();
  for (int i = 0; i < 30; i++) {
   result.add(new Item(Item.SECTION, "Section " + i));
   for (int j=0; j<4; j++) {
    result.add(new Item(Item.ITEM, "Item " + j));
   }
  }
  return result;
 }
 
    
}
note: must use library for that demo code ok for above logic .
you can download library code for below link. https://github.com/beworker/pinned-section-listview

Easy to use ListView with pinned sections for Android.

iphone style  pinned sections for Android.

here is link

https://github.com/beworker/pinned-section-listview

Tuesday 22 October 2013

tab host back stack (back button)

Don't handle KeyEvent.KEYCODE_BACK in your tab activitys, do it in your main TabActivity.
As long as your tab activitys onKeyDown() methods don't handle it but they do callsuper.onKeyDown(keyCode, event); it will filter up to your TabActivity.
In your TabActivity have a member int currentTab = 0 then in the TabActivity do this...




@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if (currentTab == 0)
            currentTab = 2;
        else
            currentTab--;
        tabHost.setCurrentTab(currentTab);
        return true;
    }
    else
        return super.onKeyDown(keyCode, event); 
}

Android Fragment back stack or tab host back stack

First of all, dont use replace() but instead use remove and add separately. It seems as though replace() doesnt work properly.
The next part to this is overriding the onKeyDown method and remove the current fragment every time the back button is pressed.



@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if (keyCode == KeyEvent.KEYCODE_BACK)
    {
        if (getSupportFragmentManager().getBackStackEntryCount() == 0)
        {
            this.finish();
            return false;
        }
        else
        {
            getSupportFragmentManager().popBackStack();
            removeCurrentFragment();

            return false;
        }



    }

    return super.onKeyDown(keyCode, event);
}


public void removeCurrentFragment()
{
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

    Fragment currentFrag =  getSupportFragmentManager().findFragmentById(R.id.detailFragment);


    String fragName = "NONE";

    if (currentFrag!=null)
        fragName = currentFrag.getClass().getSimpleName();


    if (currentFrag != null)
        transaction.remove(currentFrag);

    transaction.commit();

}

Thursday 17 October 2013

get location data logic from json

logic code
please run in AsyncTask  doinbackground method



JSONArray locationsobject = json.getJSONArray("locations");
String latitude = "";
String longitude = "";
String city = "";
String state = "";
String country = "";
String id = "";
String street = "";
String zip = "";

for (int i = 0; i < locationsobject.length(); i++) {
JSONObject i_Loc = locationsobject.getJSONObject(i);
System.out.println("location object:" + i_Loc);

try {
latitude = i_Loc.getString("latitude");
System.out.println("latitude :" + latitude);
} catch (Exception e) {

e.printStackTrace();
}
try {
longitude = i_Loc.getString("longitude");
System.out.println("longitude :" + longitude);
} catch (Exception e) {

e.printStackTrace();
}
try {
city = i_Loc.getString("city");
System.out.println("city name :" + city);
} catch (Exception e) {

e.printStackTrace();
}
try {
state = i_Loc.getString("state");
System.out.println("state :" + state);
} catch (Exception e) {

e.printStackTrace();
}
try {
country = i_Loc.getString("country");
System.out.println("country :" + country);
} catch (Exception e) {

e.printStackTrace();
}
try {
id = i_Loc.getString("id");
System.out.println("id :" + id);
} catch (Exception e) {

e.printStackTrace();
}

try {
street = i_Loc.getString("street");
System.out.println("street :" + street);
} catch (Exception e) {

e.printStackTrace();
}
try {
zip = i_Loc.getString("zip");
System.out.println("zip :" + zip);
} catch (Exception e) {

e.printStackTrace();
}
}

get location and event data from json url

mainActivity

package com.example.androidpractice;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;

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

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity {
 ArrayList<DateBean> sortArray = new ArrayList<DateBean>();

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  new FetchData().execute();
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

 class FetchData extends AsyncTask<Void, Void, Void> {

  @Override
  protected void onPreExecute() {
   // TODO Auto-generated method stub
   super.onPreExecute();
  }

  @Override
  protected Void doInBackground(Void... params) {
   // Creating JSON Parser instance
   JSONParser jParser = new JSONParser();

   // getting JSON string from URL

   JSONObject json = jParser.getJSONFromUrl("your link");
   try {
    JSONObject eventobject = json.getJSONObject("events");

    Iterator<Object> keys = eventobject.keys();

    while (keys.hasNext()) {

     String datestring = String.valueOf(keys.next());

     // by below logic you skip missed date.
     if (datestring.trim().length() > 0) {
      SimpleDateFormat formatter = new SimpleDateFormat(
        "yyyy-MM-dd");
      Date date = formatter.parse(datestring);
      DateBean dateBean = new DateBean(date);
      sortArray.add(dateBean);
     } else {

     }
     // JSONArray jsonArray =
     // eventobject.getJSONArray(datestring);
     // System.out.println(" --"+jsonArray);
    }

    System.out.println("size:" + sortArray.size());

    System.out.println("==========sorting array======");
    Collections.sort(sortArray, new CompareDate());
    // reverse order
    // Collections.reverse(sortArray);

    for (DateBean d : sortArray) {
     String dateKey = new SimpleDateFormat("yyyy-MM-dd")
       .format(d.getDate());
     System.out.println(dateKey);

     JSONArray jsonArray = eventobject.getJSONArray(dateKey);
     System.out.println(" --" + jsonArray);

    }

    // fetching location data
    JSONArray locationsobject = json.getJSONArray("locations");
    String latitude = "";
    String longitude = "";
    String city = "";
    String state = "";
    String country = "";
    String id = "";
    String street = "";
    String zip = "";

    for (int i = 0; i < locationsobject.length(); i++) {
     JSONObject i_Loc = locationsobject.getJSONObject(i);
     System.out.println("location object:" + i_Loc);

     try {
      latitude = i_Loc.getString("latitude");
      System.out.println("latitude :" + latitude);
     } catch (Exception e) {

      e.printStackTrace();
     }
     try {
      longitude = i_Loc.getString("longitude");
      System.out.println("longitude :" + longitude);
     } catch (Exception e) {

      e.printStackTrace();
     }
     try {
      city = i_Loc.getString("city");
      System.out.println("city name :" + city);
     } catch (Exception e) {

      e.printStackTrace();
     }
     try {
      state = i_Loc.getString("state");
      System.out.println("state :" + state);
     } catch (Exception e) {

      e.printStackTrace();
     }
     try {
      country = i_Loc.getString("country");
      System.out.println("country :" + country);
     } catch (Exception e) {

      e.printStackTrace();
     }
     try {
      id = i_Loc.getString("id");
      System.out.println("id :" + id);
     } catch (Exception e) {

      e.printStackTrace();
     }

     try {
      street = i_Loc.getString("street");
      System.out.println("street :" + street);
     } catch (Exception e) {

      e.printStackTrace();
     }
     try {
      zip = i_Loc.getString("zip");
      System.out.println("zip :" + zip);
     } catch (Exception e) {

      e.printStackTrace();
     }
    }
   } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   return null;
  }

  @Override
  protected void onPostExecute(Void result) {
   super.onPostExecute(result);

  }

  class CompareDate implements Comparator<DateBean> {

   @Override
   public int compare(DateBean d1, DateBean d2) {

    return d1.getDate().compareTo(d2.getDate());
   }

  }

 }

}

Monday 12 August 2013

Get Speed from Gps

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

   <TextView
        android:id="@+id/gps_info"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:gravity="center_vertical|center_horizontal"
        android:textSize="30dip"
        android:text="@string/gps_info"/>

</RelativeLayout>


then create below class for get gps location and calculate speed of vehicle.

MainActivity.java

package com.hazuu.android.gpsdemo;

import java.math.BigDecimal;
import java.math.RoundingMode;

import com.hazuu.android.gpsdemo.interfaces.Constants;
import com.hazuu.android.gpsdemo.interfaces.GPSCallback;
import com.hazuu.android.gpsdemo.managers.GPSManager;

import android.location.Location;
import android.os.Bundle;
import android.app.Activity;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.style.AbsoluteSizeSpan;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity implements GPSCallback {
private GPSManager gpsManager = null;
private double speed = 0.0;
private AbsoluteSizeSpan sizeSpanLarge = null;
private AbsoluteSizeSpan sizeSpanSmall = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

gpsManager = new GPSManager();

gpsManager.startListening(getApplicationContext());
gpsManager.setGPSCallback(this);

((TextView) findViewById(R.id.gps_info))
.setText(getString(R.string.gps_info));
}

@Override
public void onGPSUpdate(Location location) {
location.getLatitude();
location.getLongitude();
speed = location.getSpeed();

String speedString = String.valueOf(roundDecimal(convertSpeed(speed), 2));
String unitString = "km/h";

setSpeedText(R.id.gps_info, speedString + " " + unitString);
}

@Override
protected void onDestroy() {
gpsManager.stopListening();
gpsManager.setGPSCallback(null);

gpsManager = null;

super.onDestroy();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}

private double convertSpeed(double speed) {
return ((speed * Constants.HOUR_MULTIPLIER) * Constants.UNIT_MULTIPLIERS);
}

private double roundDecimal(double value, final int decimalPlace) {
BigDecimal bd = new BigDecimal(value);

bd = bd.setScale(decimalPlace, RoundingMode.HALF_UP);
value = bd.doubleValue();

return value;
}

private void setSpeedText(int textid, String text) {
Spannable span = new SpannableString(text);
int firstPos = text.indexOf(32);

span.setSpan(sizeSpanLarge, 0, firstPos,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
span.setSpan(sizeSpanSmall, firstPos + 1, text.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

TextView tv = ((TextView) findViewById(textid));

tv.setText(span);
}


}

Build Constants interface 

Constants.java

package com.hazuu.android.gpsdemo.interfaces;

public interface Constants 
{
        public static final int TEXT_SIZE_SMALL = 15;
        public static final int TEXT_SIZE_LARGE = 80;
        public static final int DEFAULT_SPEED_LIMIT = 80;
        public static final int HOUR_MULTIPLIER = 3600;
        public static final double UNIT_MULTIPLIERS = 0.001;
}

Build GPSCallback interface

GPSCallback.java

package com.hazuu.android.gpsdemo.interfaces;

import android.location.Location;

public interface GPSCallback {
public abstract void onGPSUpdate(Location location);
}


then create GPSManager class for get all GpsUpdate data and convert in to kh/h form.

GPSManager.java

package com.hazuu.android.gpsdemo.managers;

import java.util.List;

import com.hazuu.android.gpsdemo.interfaces.GPSCallback;



import android.content.Context;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;

public class GPSManager
{
        private static final int gpsMinTime = 500;
        private static final int gpsMinDistance = 0;
        
        private static LocationManager locationManager = null;
        private static LocationListener locationListener = null;
        private static GPSCallback gpsCallback = null;
        
        public GPSManager()
        {       
                GPSManager.locationListener = new LocationListener()
                {
                        @Override
                        public void onLocationChanged(final Location location)
                        {
                                if (GPSManager.gpsCallback != null)
                                {
                                        GPSManager.gpsCallback.onGPSUpdate(location);
                                }
                        }
                        
                        @Override
                        public void onProviderDisabled(final String provider)
                        {
                        }
                        
                        @Override
                        public void onProviderEnabled(final String provider)
                        {
                        }
                        
                        @Override
                        public void onStatusChanged(final String provider, final int status, final Bundle extras)
                        {
                        }
                };
        }
        
        public GPSCallback getGPSCallback()
        {
                return GPSManager.gpsCallback;
        }
        
        public void setGPSCallback(final GPSCallback gpsCallback)
        {
                GPSManager.gpsCallback = gpsCallback;
        }
        
        public void startListening(final Context context)
        {
                if (GPSManager.locationManager == null)
                {
                        GPSManager.locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
                }
                
                final Criteria criteria = new Criteria();
                
                criteria.setAccuracy(Criteria.ACCURACY_FINE);
                criteria.setSpeedRequired(true);
                criteria.setAltitudeRequired(false);
                criteria.setBearingRequired(false);
                criteria.setCostAllowed(true);
                criteria.setPowerRequirement(Criteria.POWER_LOW);
                
                final String bestProvider = GPSManager.locationManager.getBestProvider(criteria, true);
                
                if (bestProvider != null && bestProvider.length() > 0)
                {
                        GPSManager.locationManager.requestLocationUpdates(bestProvider, GPSManager.gpsMinTime,
                                        GPSManager.gpsMinDistance, GPSManager.locationListener);
                }
                else
                {
                        final List<String> providers = GPSManager.locationManager.getProviders(true);
                        
                        for (final String provider : providers)
                        {
                                GPSManager.locationManager.requestLocationUpdates(provider, GPSManager.gpsMinTime,
                                                GPSManager.gpsMinDistance, GPSManager.locationListener);
                        }
                }
        }
        
        public void stopListening()
        {
                try
                {
                        if (GPSManager.locationManager != null && GPSManager.locationListener != null)
                        {
                                GPSManager.locationManager.removeUpdates(GPSManager.locationListener);
                        }
                        
                        GPSManager.locationManager = null;
                }
                catch (final Exception ex)
                {
                        
                }
        }
}


then below permission are must be add in Androidmainfest.xml

 

 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>



Androidmainfest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hazuu.android.gpsdemo"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
   
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>

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

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

</manifest>