View Recycling

Linear layout: warning memory is limited
ListView + Array adapter

Create more rows on-demand by reusing views in the scrap pile
Scroll to see more at the top of the list

ArrayAdapter<String> itemsAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, words);

ListView listView = (ListView) findViewById(R.id.list);
listView.setAdapter(itemsAdapter);

concrete class, abstract class, interface
Spinner(drop-down menu) -> ArrayAdapter

<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/res/android"
	android:layout_width="match_parent"
	android:lyout_height="match_parent"
	android:paddingBottom="16dp"
	android:paddingLeft="16dp"
	android:paddingRight="16dp"
	android:paddingTop="16dp"
	android:numColumns="2"
	android:orientation="vertical"
	android:id="@+id/list"
	tools:context="com.example.android.miwok.NumbersActivity">
</GridView>

Loop

while loop
setup counter variable, condition, update counter variable

int index = 0;
while(index < 4){

	Log.v("NumbersActivity",
		"Index: " + index + "
		value: " + words[index]);

		index++;
}

for loop

for(int index = 0; index < words.size(); index++){
	log.v("NumbersActivity",
		"Index: " + index +
		"Value: " + words.get(index));
}
import androis.os.Bundle;
import android.support.v7.app.AppCompactActivity;
import android.widget.LinearLayout;
import android.widget.TextView;

import java.util.ArrayList;

package com.example.android.miwok;

public class NumbersActivity extends AppCompactActivity {

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

		// Create on array of words
		ArrayList words = new ArrayList();

        words.add("one");
        words.add("two");
        words.add("three");
        words.add("four");
        words.add("five");
        words.add("six");
        words.add("seven");
        words.add("eight");
        words.add("nine");
        words.add("ten");

		LinearLayout rootView = (LinearLayout)findViewById(R.id.rootView);

		for (int index = 0; index < words.size(); index++)
		{
			TextView wordView = new TextView(this);
			wordView.setText(words.get(index));
			rootView.addView(wordView);
			index++;
		}
	}
}

While Loop

while (condition) {
Instruction
Update counter variable
}

int count = 0;

while(count < 3){ playSound(); count = count + 1; } [java] int index = 0; while(index < 4){ Log.v("NumbersActivity", "Index: " + index + " value: " + words[index]); index++; } [/java] NumbersActivity.java [java] import androis.os.Bundle; import android.support.v7.app.AppCompactActivity; import android.widget.LinearLayout; import android.widget.TextView; import java.util.ArrayList; package com.example.android.miwok; public class NumbersActivity extends AppCompactActivity { @Override protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_numbers); // Create on array of words ArrayList words = new ArrayList();

words.add(“one”);
words.add(“two”);
words.add(“three”);
words.add(“four”);
words.add(“five”);
words.add(“six”);
words.add(“seven”);
words.add(“eight”);
words.add(“nine”);
words.add(“ten”);

LinearLayout rootView = (LinearLayout)findViewById(R.id.rootView);
int index = 0;
while (index < words.size()){ TextView wordView = new TextView(this); wordView.setText(words.get(index)); rootView.addView(wordView); index++; } } }[/java] for (Setup counter variable; Condition; Update counter variable){ Instructions }

Add Text Views

Add text view to the Layout
activity_numbers.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/res/android"
	android:layout_width="match_parent"
	android:lyout_height="match_parent"
	android:paddingBottom="16dp"
	android:paddingLeft="16dp"
	android:paddingRight="16dp"
	android:paddingTop="16dp"
	android:orientation="vertical"
	android:id="@+id/rootView"
	tools:context="com.example.android.miwok.NumbersActivity">
</LinearLayout>

android:textView class
https://developer.android.com/reference/android/widget/TextView.html

/.../
package com.example.android.miwok;

public class NumbersActivity extends AppCompactActivity {

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

		// Create on array of words
		ArrayList<String> words = new ArrayList<String>();

        words.add("one");
        words.add("two");
        words.add("three");
        words.add("four");
        words.add("five");
        words.add("six");
        words.add("seven");
        words.add("eight");
        words.add("nine");
        words.add("ten");

		LinearLayout rootView = (LinearLayout)findViewById(R.id.rootView);
		TextView wordView = new TextView(this);
		wordView.setText(words.get(0));
		rootView.addView(wordView);

		TextView wordView2 = new TextView(this);
		wordView2.setText(words.get(1));
		rootView.addView(wordView2);

		TextView wordView3 = new TextView(this);
		wordView3.setText(words.get(2));
		rootView.addView(wordView3);
	}
}

Array and ArrayList

Array, ArrayList
-can change size one created? no, yes
-is a class? no, yes
-use methods to access and modify element? no, yes
-what can it store? primitive and objects, only objects

ArrayList

import java.util.*;

public class ArrayListExample {
   public static void main(String args[]) {
      /*Creation of ArrayList: I'm going to add String
       *elements so I made it of string type */
	  ArrayList<String> obj = new ArrayList<String>();

	  /*This is how elements should be added to the array list*/
	  obj.add("Ajeet");
	  obj.add("Harry");
	  obj.add("Chaitanya");
	  obj.add("Steve");
	  obj.add("Anuj");

	  /* Displaying array list elements */
	  System.out.println("Currently the array list has following elements:"+obj);

	  /*Add element at the given index*/
	  obj.add(0, "Rahul");
	  obj.add(1, "Justin");

	  /*Remove elements from array list like this*/
	  obj.remove("Chaitanya");
	  obj.remove("Harry");

	  System.out.println("Current array list is:"+obj);

	  /*Remove element from the given index*/
	  obj.remove(1);

	  System.out.println("Current array list is:"+obj);
   }
}

NumberActivity.java

/.../
package com.example.android.miwok;

public class NumbersActivity extends AppCompactActivity {

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

		// Create on array of words
		ArrayList<String> words = new ArrayList<String>();

        words.add("one");
        words.add("two");
        words.add("three");
        words.add("four");
        words.add("five");
        words.add("six");
        words.add("seven");
        words.add("eight");
        words.add("nine");
        words.add("ten");

		Log.v("NumbersActivity","Word at index 0: " + words.get(0));
		Log.v("NumbersActivity","Word at index 1: " + words.get(1));
	}
}

Arrays, Lists, Loops

All variables need a data type
integer, boolean, TextView, ImageView

int x = 14;
int y = 60;
int result = x + y;
not make sense of two boolean

int, double, boolean, char, long, float, short, byte, String

create array
int [] shoeSizesAvailable = new int[3];

initialize elements in an array
shoeSizesAvailable[0] = 5;
shoeSizesAvailable[1] = 7;
shoeSizesAvailable[2] = 10;

Access elements in an array
shoeSizesAvailable[0] -> value of 5
shoeSizesAvailable[1] -> value of 7
shoeSizesAvailable[2] -> value of 10

int[] soccerTeam = new int[11];
soccerTeam[0] = 5;
soccerTeam[10] = 1;
soccerTeam[4] = 23;
soccerTeam[1] = 10;

number of array list

/.../
package com.example.android.miwok;

public class NumbersActivity extends AppCompactActivity {

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

		// Create on array of words
		String[] words = new String[10];
		word[0] = "one";
		word[1] = "two";
		word[2] = "three";
		word[3] = "four";
		word[4] = "five";
		word[5] = "six";
		word[6] = "seven";
		word[7] = "eight";
		word[8] = "nine";
		word[9] = "ten";

		Log.v("NumbersActivity","Word at index 0: " + words[0]);
		Log.v("NumbersActivity","Word at index 1: " + words[1]);
	}
}

shorter code

package com.example.android.miwok;

import android.conent.Intent;
import android.support.v7.app.AppCompactActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompactActivity {

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

		// Find the View that shows the numbers category
		TextView numbers = (TextView)findViewById(R.id.numbers);

		//Set a clickListener on that View
		numbers.setOnClickListener(new OnClickListener(){

			@Override
			public void onClick(View view){
				Intent numbersIntent = new Intent(MainActivity.this, NumbersActivity.class);

				startActivity(numbersIntent);
			}
		});
	}

}
Button button = (Button) findViewById(R.id.ze_button);
button.setOnClickListener(new View.OnClickListener(){
	@Override
	public void onClick(view v){
		doSomeStuff();
	}
});
android:onClick="myListener"
public void myListener(View view){
	doSomeStuff();
}

setup an event listener

setup an event listener

public class NumbersClickListener implements OnClickListener {
	@Override
	public void onClick(View view) { Toast.makeText(view.getContext(),
		"Open the list of numbers", Toast.LENGTH_SHORT).show();}
}

NumbersClickListener clickListener = new NumbersClickListener();

buttonView.setOnClickListener(clickListener);
TextView priceTextView = new TextView()
package com.example.android.miwok;

import android.view.View;
import android.widget.Toast;

public class NumbersClickListener implements View.OnClickListener {

	@Override
	public void onClick(View view) { 
		Toast.makeText(view.getContext(),
			"Open the list of numbers", Toast.LENGTH_SHORT).show();
	}
}

MainActivity.java

package com.example.android.miwok;

import android.conent.Intent;
import android.support.v7.app.AppCompactActivity;
import android.os.Bundle;
import android.view.View;

public class MainActivity extends AppCompactActivity {

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

		NumbersClickListener clickListener = new NumbersClickListener();

		// Find the View that shows the numbers category
		TextView numbers = (TextView)findViewById(R.id.numbers);

		//Set a clickListener on that View
		numbers.setOnClickListener(click.Listener);
	}

}

AndroidManifest activity tag

AndroidManifest activity tag
https://developer.android.com/guide/topics/manifest/activity-element.html

Miwok App
background colors(colors.xml)
theme of the app(styles.xml)
how a category looks(category style in styles.xml)
list item height(dimensions.xml)
category names(strings.xml)
MainActivity.java(activity_main.xml layout file)

listen for user input event
-user interact with app
-> click
-behind the scenes

android input event
https://developer.android.com/guide/topics/ui/ui-events.html

callback method
onClick(), onLongClick(), onFocusChange(), onKey(), onTouch(), onCreateContextMenu()
onLongClick(), onKey(), onTouch()

TextView method
-getText, setText, setOnClickListener

onClick:show a toast message, change the background of the TextView, pop up a dialog

onViewClick Method
https://developer.android.com/reference/android/view/View.OnClickListener.html

concrete class, abstract class, interface

Types of intents

implicit intent
-action, data uri, category, components, extras

Implicit Intent

Intent intent = new Intent(Intent.ACTION_SENDTO);
sendIntent.setData(Uri.parse("mailto:"));
sendIntent.putExtra(Intent.EXTRA_SUBJECT, "Just Java order for " + name);
sendIntent.putExtra(Intent.EXTRA_TEXT, priceMessage);

if (sendIntent.resolveActivity(getPackageManager()) != null){
	startActivity(sendIntent);
}

Explicit Intent

Intent intent = new Intent(this, NumbersActivity.class);
startActivity(intent);