Sunday, January 5, 2014

Implement OnItemClickListener for custom ListView

This example implement OnItemClickListener for custom List in last post "Create custom ListView of custom object" to get and display the clicked item.

Implement OnItemClickListener for custom ListView
Implement OnItemClickListener for custom ListView

package com.example.androidcustomlistview;

import java.util.ArrayList;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.app.Activity;
import android.content.Context;

public class MainActivity extends Activity {

private class MyObject{
private int number;
private String name;

MyObject(int num, String nam){
number = num;
name = nam;
}

public int getNumber(){
return number;
}

public String getName(){
return name;
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView)findViewById(R.id.listview);

//Init ArrayList of MyObject
ArrayList<MyObject> myArrayList = new ArrayList<MyObject>();
myArrayList.add(new MyObject(0, "Sunday"));
myArrayList.add(new MyObject(1, "Monday"));
myArrayList.add(new MyObject(2, "Tuesday"));
myArrayList.add(new MyObject(3, "Wednesday"));
myArrayList.add(new MyObject(4, "Thursday"));
myArrayList.add(new MyObject(5, "Friday"));
myArrayList.add(new MyObject(6, "Saturday"));

MyAdapter myAdapter = new MyAdapter(this, myArrayList);
listView.setAdapter(myAdapter);

listView.setOnItemClickListener(new OnItemClickListener(){

@Override
public void onItemClick(AdapterView<?> parent,
View view, int position, long id) {
MyObject clickedObj = (MyObject)parent.getItemAtPosition(position);
Toast.makeText(MainActivity.this,
"Clicked item:\n" +
clickedObj.getNumber() + ": " +
clickedObj.getName(),
Toast.LENGTH_LONG).show();
}});

}

private class MyAdapter extends BaseAdapter {

private ArrayList<MyObject> myList;

private Activity parentActivity;
private LayoutInflater inflater;

public MyAdapter(Activity parent, ArrayList<MyObject> l) {
parentActivity = parent;
myList=l;
inflater = (LayoutInflater)parentActivity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
return myList.size();
}

@Override
public Object getItem(int position) {
return myList.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView (int position, View convertView,
ViewGroup parent) {
View view = convertView;
if(convertView==null)
view = inflater.inflate(R.layout.row, null);

TextView text1 = (TextView)view.findViewById(R.id.text1);
TextView text2 = (TextView)view.findViewById(R.id.text2);
MyObject myObj = myList.get(position);
text1.setText(String.valueOf(myObj.getNumber()));
text2.setText(myObj.getName());
return view;
}
}
}

Create custom ListView of custom object

This example create ListView using custom adapter for custom object.

Create custom ListView of custom object
Create custom ListView of custom object

package com.example.androidcustomlistview;

import java.util.ArrayList;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.app.Activity;
import android.content.Context;

public class MainActivity extends Activity {

private class MyObject{
private int number;
private String name;

MyObject(int num, String nam){
number = num;
name = nam;
}

public int getNumber(){
return number;
}

public String getName(){
return name;
}
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ListView listView = (ListView)findViewById(R.id.listview);

//Init ArrayList of MyObject
ArrayList<MyObject> myArrayList = new ArrayList<MyObject>();
myArrayList.add(new MyObject(0, "Sunday"));
myArrayList.add(new MyObject(1, "Monday"));
myArrayList.add(new MyObject(2, "Tuesday"));
myArrayList.add(new MyObject(3, "Wednesday"));
myArrayList.add(new MyObject(4, "Thursday"));
myArrayList.add(new MyObject(5, "Friday"));
myArrayList.add(new MyObject(6, "Saturday"));

MyAdapter myAdapter = new MyAdapter(this, myArrayList);
listView.setAdapter(myAdapter);

}

private class MyAdapter extends BaseAdapter {

private ArrayList<MyObject> myList;

private Activity parentActivity;
private LayoutInflater inflater;

public MyAdapter(Activity parent, ArrayList<MyObject> l) {
parentActivity = parent;
myList=l;
inflater = (LayoutInflater)parentActivity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

@Override
public int getCount() {
return myList.size();
}

@Override
public Object getItem(int position) {
return myList.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView (int position, View convertView,
ViewGroup parent) {
View view = convertView;
if(convertView==null)
view = inflater.inflate(R.layout.row, null);

TextView text1 = (TextView)view.findViewById(R.id.text1);
TextView text2 = (TextView)view.findViewById(R.id.text2);
MyObject myObj = myList.get(position);
text1.setText(String.valueOf(myObj.getNumber()));
text2.setText(myObj.getName());
return view;
}
}
}

row.xml, define the layout of individual row in the list.
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity" >

<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"/>

</LinearLayout>

Main layout
<LinearLayout 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"
android:orientation="vertical"
tools:context=".MainActivity" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="android-coding.blogspot.com" />
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

</LinearLayout>

Next: Implement OnItemClickListener for custom ListView

Saturday, January 4, 2014

DrawerLayout with custom Layout/View

The post "Example of Navigation Drawer" show a android.support.v4.widget.DrawerLayout with ListView inside. We can also place our layout/view inside DrawerLayout.

DrawerLayout with custom Layout/View
DrawerLayout with custom Layout/View

<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="android-coding.blogspot.com" />
</RelativeLayout>

<LinearLayout
android:id="@+id/drawer"
android:layout_width="200dp"
android:layout_height="match_parent"
android:layout_gravity="start"
android:orientation="vertical"
android:background="@android:color/background_dark"
android:padding="5dp" >

<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="android-coding"/>
<Button
android:id="@+id/drawerbutton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/background_light"
android:text="Hello"/>
</LinearLayout>

</android.support.v4.widget.DrawerLayout>

package com.example.androidnavigationdrawer;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

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

Button buttonHello = (Button)findViewById(R.id.drawerbutton);
buttonHello.setOnClickListener(new OnClickListener(){

@Override
public void onClick(View arg0) {
Toast.makeText(MainActivity.this,
"Hello Android-Coding",
Toast.LENGTH_LONG).show();
}});
}

}

Friday, December 27, 2013

android:spinnerMode="dialog"

Example of Android Spinner without and with android:spinnerMode="dialog":

Normal Spinner without android:spinnerMode="dialog"
Normal Spinner without android:spinnerMode="dialog"

Spinner with android:spinnerMode="dialog"
Spinner with android:spinnerMode="dialog"

<LinearLayout 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:orientation="vertical"
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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="android-coding.blogspot.com"
android:textColor="#A00000"
android:textStyle="bold|italic" />

<Spinner
android:id="@+id/myspinner1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<Spinner
android:id="@+id/myspinner2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:spinnerMode="dialog" />

</LinearLayout>

package com.example.androidspinner;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.app.Activity;

public class MainActivity extends Activity {

String[] dayOfWeek = {"Sunday", "Monday", "Tuesday",
"Wednesday", "Thursday", "Friday", "Saturday"};

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

Spinner MySpinner1 = (Spinner)findViewById(R.id.myspinner1);
ArrayAdapter<String> myAdapter1 = new
ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, dayOfWeek);
myAdapter1.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MySpinner1.setAdapter(myAdapter1);

Spinner MySpinner2 = (Spinner)findViewById(R.id.myspinner2);
ArrayAdapter<String> myAdapter2 = new
ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, dayOfWeek);
myAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
MySpinner2.setAdapter(myAdapter2);
}

}

Monday, December 23, 2013

Google Maps Android API Utility Library

Google Maps Android API Utility Library is an open-source library of classes that are useful for a range of applications, to add advanced features to your maps.

The source of the Google Maps Android API Utility Library is available on GitHub. The GitHub repository includes the utility classes and a demonstration application that illustrates the use of each class. To get started, follow the setup guide for Eclipse. Alternatively, the project's website includes a getting-started guide for Android Studio/Gradle and Maven. The reference documentation is also available on GitHub. Below is an overview of the utilities in the library.

This video discusses the utility library, with a focus on polyline decoding, spherical geometry, and bubble icons:

Monday, December 16, 2013

Example of using TextWatcher

Example of using TextWatcher
Example of using TextWatcher


package com.example.androidtextwatcher;

import android.os.Bundle;
import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

EditText input;
TextView info, cont;

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

input = (EditText)findViewById(R.id.input);
info = (TextView)findViewById(R.id.info);
cont = (TextView)findViewById(R.id.cont);
input.addTextChangedListener(myTextWatcher);
}

TextWatcher myTextWatcher =
new TextWatcher(){

@Override
public void afterTextChanged(Editable s) {
/*
* This method is called to notify you that,
* somewhere within s, the text has been changed.
*/
//info.setText("");
//cont.setText(s.toString());
}

@Override
public void beforeTextChanged(CharSequence s,
int start, int count, int after) {
/*
* This method is called to notify you that,
* within s, the count characters beginning at
* start are about to be replaced by new text
* with length after.
*/
info.setText("beforeTextChanged - " + start + " " + count + " " + after);
cont.setText(s.toString());
}

@Override
public void onTextChanged(CharSequence s,
int start, int before, int count) {
/*
* This method is called to notify you that,
* within s, the count characters beginning
* at start have just replaced old text that
* had length before.
*/
info.setText("onTextChanged - " + start + " " + before + " " + count);
cont.setText(s.toString());
}};

}


<LinearLayout 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:orientation="vertical"
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:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="android-coding.blogspot.com"
android:textColor="#A00000"
android:textStyle="bold|italic" />
<EditText
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/info"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/cont"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

</LinearLayout>

Sunday, December 15, 2013

Set layout programmatically

This example show how to set paddings and margins programmatically with Java code.

set paddings and margins programmatically
set paddings and margins programmatically

package com.example.androidadjlayout;

import android.os.Bundle;
import android.app.Activity;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class MainActivity extends Activity {

LinearLayout mainLayout;
SeekBar settingPadding, settingMargin2;
ImageView image1, image2;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainLayout = (LinearLayout)findViewById(R.id.mainlayout);
settingPadding = (SeekBar)findViewById(R.id.setmainpadding);
settingMargin2 = (SeekBar)findViewById(R.id.setimage2margin);
image1 = (ImageView)findViewById(R.id.image1);
image2 = (ImageView)findViewById(R.id.image2);

settingPadding.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
mainLayout.setPadding(progress, progress, progress, progress);
}

@Override
public void onStartTrackingTouch(SeekBar arg0) {
}

@Override
public void onStopTrackingTouch(SeekBar arg0) {
}});

settingMargin2.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){

@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
LinearLayout.LayoutParams layoutParams = (LayoutParams) image2.getLayoutParams();
layoutParams.setMargins(progress, progress, progress, progress);
image2.setLayoutParams(layoutParams);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}});
}

}


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mainlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="5dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:paddingTop="5dp"
android:orientation="vertical"
tools:context=".MainActivity"
android:background="#303030" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#A00000"
android:textStyle="bold|italic"
android:text="android-coding.blogspot.com" />
<SeekBar
android:id="@+id/setmainpadding"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="5"/>
<SeekBar
android:id="@+id/setimage2margin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:max="100"
android:progress="5"/>
<ImageView
android:id="@+id/image1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher"
android:background="#505050"/>
<ImageView
android:id="@+id/image2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:src="@drawable/ic_launcher"
android:background="#808080" />

</LinearLayout>