You are on page 1of 18

Android Studio

 Activity livecycle  onCreate, onStart, onResume, onPause, onPause, onStop,


onRestart, onDestroy, onSaveInstanceState, onRestoreInstanceState
Alt + insert override methods
Import android.util.Log;
---psvm---
Private static final String TAG = “MyMessage”;
@override
Protected void onStart(){
Super.onStart();
Log.i(TAG, “onStart”);
}
Dst
Membuka app onCreate, onStart, onResume
Menekan back button  onPause, onStop, onDestroy
App dibuka kembali  onCreate, onStart, onResume
Menekan home button  onPause, onSaveInstance, onStop
App dibuka kembali  onRestart, onStart, onResume
 Membuat user interface menggunakan java
Import android.app.Activity;
Import android.os.Bundle;
Import android.widget.RelativeLayout;
Import android.widget.Button;
Import android.graphics.Color;
Import android.widget.EditText;
Import android.content.res.Resources;
Import android.util.TypedValue;
Public class mainActivity extends Activity {
//onCreate method yg sudah dibuat dari sana sebagian code nya dihapus menjadi
sbg berikut
@override
Protected void onCreate(Bundle savedInstanceState) {
Super.onCreate(savedInstanceState);
//membuat RelativeLayout dan Button
RelativeLayout myLayout = new RelativeLayout(this);
Button myButton = new Button(this);
//mengganti background color di myLayout dan myButton
myLayout.setBackgroundColor(Color.BLUE);
myButton.setBackgroundColor(Color.GREEN);
//mengganti teks dalam myButton
myButton.setText(“Click Here”);
//menentukan letak myButton
RelativeLayout.LayoutParams buttonDetails =
New RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
);
ButtonDetails.addRule(RelativeLayout.CENTER_HORIZONTAL);
ButtonDetails.addRule(RelativeLayout.CENTER_VERTICAL);
//menambahkan button dan ButtonDetails ke dalam myLayout
myLayout.addView(myButton, ButtonDetails);
//membuat EditText
EditText username = new EditText (this);
//set id
myButton.setId(1);
username.setId(2);
//menentukan letak username
RelativeLayout.LayoutParams usernameDetails =
New RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
);
usernameDetails.addRule(RelativeLayout.ABOVE, myButton.getId());
usernameDetails.addRule(RelativeLayout.CENTER_HORIZONTAL);
//convert DIP ke pixel
Resources r = getResources();
Int pixels = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
200, r.getDisplayMetrics());
//mengatur panjangnya username menggunakan DIP yang sudah diconvert ke pixels
Username.setWidth(pixels);
//menambahkan margin (left, top, right, bottom)
usernameDetails.setMargins(0,0,0,50);
//menambahkan username dan usernameDetails ke myLayout
myLayout.addView(username, usernameDetails);
//menampilkan myLayout di screen
setContentView(myLayout);
}
 Grid layout
 Event handling  apa yang terjadi bila kita klik, double tap, dll (terkandung dari
event listener dan callback method)
Import android.os.Bundle;
Import android.support.v7.app.AppCompatActivity;
Import android.view.View;
Import android.widget.Button;
Import android.widget.TextView;
---dalam onCreate---
//mendapatkan id button (id dari button nya adalah myButton)
Button myButton = (Button) findViewById(R.Id.myButton);
//action listener
myButton.setOnClickListener(
New Button.OnClickListener(){
//callback method
Public void onClick(View v) {
TextView myText = (TextView) findViewById(R.Id.myText);
MyText.setText(“Button Clicked”);
}})
//long click action listener
myButton.setOnLongClickListener(
New Button.OnLongClickListener(){
//Callback method menggunakan boolean
Public boolean onLongClick (View v){
TextView myText = (TextView) findViewById(R.id.myText);
MyText.setText(“long button Pressed”);
Return true;
}})
 Gestures  double tap, scroll, fling, dll
Import android.os.Bundle;
Import android.support.v7.app.AppCompatActivity;
Import android.widget.TextView;
Import android.view.MotionEvent;
Import android.view.GestureDetector;
Import android.support.v4.view.GestureDetectorCompat;
Public class MainActivity extends AppCompactActivity implements
GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener{
//membuat text view dan gesture detector
Private TextView myMessage;
Private GestureDetector gestureDetector;
---di dalam onCreate---
myMessage = (TextView) findViewById(R.id.myMessage);
this.gestureDetector = new GestureDetector(this,this);
gestureDetector.setOnDoubleTapListener(this);
//alt + insert  implement methods
@override
Public boolean onTouchEvent(MotionEvent event){
This.gestureDetector.onTouchEvent(event);
Return super.onTouchEvent(event);
}
@override
Public boolean onSingleTapConfirmed(MotionEvent e){
myMessage.setText(“Single tap confirmed”);
return false;
}
Dst
 Fragments  2 activity dalam sebuah activity, misal activity bagian atas merupakan
text dan tombol sedangkan activity bagian bawah adalah gambar
Res, drawable untuk semua gambar yg akan digunakan di aplikasi menggunakan
copy paste, penamaan tidak boleh menggunakan angka
cara membuat layout fragment xml  layout, new, layoutresourcefile, nama :
top_section_fragment.xml (terserah), root element = RelativeLayout
cara membuat java class untuk fragment  klik folder java, klik kanan subfolder
com.blablabla, create new class
---top_section_fragment.xml---
<EditText
Android:layout_width=”wrap_content”
Android:layout_height=”wrap_content”
Android:id=”@+id/topTextInput”
Android:layout_centerHorizontal=”true”
Android:layout_marginTop=”15dp”
Android:width=”300dp”
/>
<Button
Android:layout_width=”wrap_content”
Android:layout_height=”wrap_content”
Android:id=”@+id/button”
Android:layout_centerHorizontal=”true”
Android:layout_marginTop=”55dp”
Android:text=”click here”
/>
---bottom_picture_fragment.xml---
Design, properties (kanan), background, project, drawable, select image
---TopSectionFragment.java---
Import android.os.Bundle;
Import android.support.annotation.Nullable;
Import android.support.v4.app.Fragment;
Import android.view.LayoutInflater;
Import android.view.View;
Import android.view.ViewGroup;
Public class TopSectionFragment extends Fragment {
//alt+insert, override methods, onCreateView, ok
@Nullable
@Override
Public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState){
View view = inflater.inflate(R.layout.top_section_fragment,container,false);
Return view;
}}
---BottomPictureFragment.java---
Import android.os.Bundle;
Import android.support.annotation.Nullable;
Import android.support.v4.app.Fragment;
Import android.view.LayoutInflater;
Import android.view.View;
Import android.view.ViewGroup;
Public class TopSectionFragment extends Fragment {
@Nullable
@Override
Public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState){
View view = inflater.inflate(R.layout.bottom_picture_fragment,container,false);
Return view;
}}
---content_main.xml---
Design, custom, <fragment>, TopSectionFragment & BottomSectionFragment, ok,
klik @layout/top_section_fragment
 Workout adviser
---content_find_workout.xml--- (text, bisa tinggal di drag and drop di design)
<Spinner
Android:layout_width=”wrap_content”
Android:layout_height=”wrap_content”
Android:id=”@+id/workouttype”
Android:layout_marginTop=”35dp”
Android:layout_alignParentTop=”true”
//memasukkan item dalam strings.xml ke sini (workout_types merupakan nama
array)
Android:entries=”@array/workout_types”
/>
<TextView
Android:id=”@+id/workout”
Android:layout_width=”wrap_content”
Android:layout_height=”wrap_content”
Android:text=”your workouts here”
Android:layout_below=”@+id/findworkout”
/>
<Button
Android:layout_width=”wrap_content”
Android:layout_height=”wrap_content”
Android:id=”@+id/findworkout”
Android:text=”new button”
Android:layout_alignLeft=”@+id/workouttype”
//jika menggunakan relative layout, widget bisa diletakkan dibawah widget lain.
(button diletakkan di bawah text view menggunakan id text view)
Android:layout_below=”@+id/workouttype”
//menambahkan onClick (apa yang akan terjadi jika button di klik) di xml
Android:onClick=”onClickFindWorkout”
/>
---strings.xml---
<string name = blablabla  strings yg digunakan untuk layout aplikasi</string>
<string-array name=”workout_types”>
<item>Chest</item>
<item>biceps</item>
<item>triceps</item>
<item>shoulders</item>
</string-array>
---FindWorkoutActivity.java--- (main activity)
Import android.os.Bundle;
Import android.app.Activity;
Import android.support.v7.app.AppCompatActivity;
Import android.view.View;
Public class FindWorkoutActivity extends Activity{
//membuat object dari class WorkoutExpert
Private WorkoutExpert expert = new WorkoutExpert();
@Override
--onCreate—{}
Public void onClickFindWorkout (View view){
TextView workouts = (TextView) findViewById(R.id.workout);
Spinner workouttype = (Spinner) findViewById(R.id.workouttype);
//mendapatkan item yang dipilih dalam spinner
String workout = String.valueOf(workouttype.getSelectedItem());
//Workouts.setText(workout); Hasil  ada spinner dengan pilihan shoulders, biseps,
dll dan jika salah satu dipilih dan tekan tombol maka textView akan diganti menjadi
polihan yg dipilih (biseps,dll)
List<String> workoutList = expert.getWorkouts(workout);
StringBuilder workoutFormatted = new StringBuilder();
//membuat for each loop untuk items dalam workoutList (listString dalam xml)
For(String work : workoutList){
//menyambungkan string builder ke item dalam workout list (String work) dan
menambah enter
workoutsFormatted.append(work).append('\n’);
}
Workouts.setText(workoutsFormatted);
}
---WorkoutExpert.java---
Import java.util.List;
Public class WorkoutExpert {
List <String> getWorkouts(String workoutTypes){
List <String> workout = new ArrayList<String>();
If(workoutTypes.equals(“Chest”)){
Workout.add(“Bench Press”);
Workout.add(“Cable Flys”);
}else if (workouttypes.equals(“Triseps”)){
Workout.add(“Triceps ext”);
Workout.add(“triceps pushdowns”);
}else if(workouttypes.equals(“Shoulder”){
Workout.add(“shoulder press”);
}else if (workouttypes.equals(“Byceps”)){
Workout.add(“Bycep curls”);
}
Return workout;
}}
 cara run aplikasi di device
build, build APK, notif build apk, klik link show in Explorer, ada file dan harus di send
ke device
 overflow menu (api 21)  apa yang akan terjadi jika menekan 3 titik di ujung
activity bagian atas
RelativeLayout, properties, id  main_view
Menu, menu_main.xml
---strings.xml---
<string name=”blqblabla”>blabla</string>
<string name=”red_string”>red</string>
<string name=”blue_string”>blue</string>
<string name=”green_string”>green</string>
---menu_main.xml---
<menu blablabla>
//membuat group item dan jika terdapat beberapa pilihan, kita bisa memilih 1
option
<group android:checkableBehavior =”single”>
<item
Android:id=”@+id/menu_red”
//akan tampil pertama dalam menu
Android:orderInCategory=”1”
App:showAsAction=”never”
Android:title=”@string/red_string”
/>
<item
Android:id=”@+id/menu_blue”
//akan tampil kedua dalam menu
Android:orderInCategory=”2”
App:showAsAction=”never”
Android:title=”@string/blue_string”
/>
<item
Android:id=”@+id/menu_green”
//akan tampil kedua dalam menu
Android:orderInCategory=”3”
App:showAsAction=”never”
Android:title=”@string/green_string”
/>
</group>
</menu>
---MainActivity.java---
//code di dalam onCreate setelah setContentView dihapus
--onCreate—{}
--onCreateOptionMenu—{}
@Override
Public boolean onOptionsItemSelected (MenuItem item){
RelativeLayout main_view = (RelativeLayout)findViewById(R.id.main_view);
Switch(item.getItemId()){
Case R.id.menu_red:
If(item.isChecked())
Item.setChecked(false);
Else
Item.setChecked(true);
main_view.setBackgroundColor(Color.RED);
return true;
Case R.id.menu_blue:
If(item.isChecked())
Item.setChecked(false);
Else
Item.setChecked(true);
main_view.setBackgroundColor(Color.BLUE);
return true;
Case R.id.menu_green:
If(item.isChecked())
Item.setChecked(false);
Else
Item.setChecked(true);
main_view.setBackgroundColor(Color.GREEN);
return true;
default:return super.onOptionsItemSelected(item);
}}}
Manifest, AndroidManifest.xml, show line numbers, 14th line, hapus NoActionBar,
run app
 animations & transitions (API 21)
RelativeLayout, properties, id  myLayout
Tambahkan Button, properties, id  myButton
---MainActivity.java---
ViewGroup myLayout;
--onCreate--
myLayout = (ViewGroup) findViewById(R.id.myLayout);
myLayout.setOnTouchListener(
new RelativeLayout.OnTouchListener(){
public boolean onTouch (View v, MotionEvent event){
moveButton();
return true;
}})
Public void moveButton(){
//membuat animasi (proses gerakan button saat ditekan)
TransitionManager.beginDelayTransition(myLayout);
View myButton = findViewById(R.id.myButton);
RelativeLayout.LayoutParams positionRules = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
);
//menambahkan transitions agar button bisa pindah ke bawah
positionRules.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM,RelativeLayout.TR
UE);
myButton.setLayoutParams(positionRules);
//code untuk menambahkan transition button bisa menjadi lebih besar
ViewGroup.LayoutParams sizeRules = myButton.getLayoutParams();
sizeRules.width=450;
sizeRules.height=300;
myButton.setLayoutParams(sizeRules);
}
Hasil  ketika klik layout, button akan pindah kebawah dan ukurannya akan
membesar dengan animasi
 intent (api 15)  jika mengeklik sesuatu di sebuah activity, activity lain akan muncul.
RelativeLayout, Properties, background  #009900 (random number) hasilnya hijau,
id  FirstText
Tambahkan LargeText, properties, text First Activity
Tambahkan Button, properties, id  FirstButton
---content_main.xml---
<TextView
Blablabla
/>
<Button
Blablabla
Android:onClick=”onClick”
/>
App folder, java, com.blabla, new, activity, blank activity, jangan centang Launcher
Activity dan Use as a Fragment, name  content_activity_two.xml
RelativeLayout di content_activity_two.xml, properties, background  #006699
(background menjadi biru)
Tambahkan large text, properties, text  Second Activity, id  SecondText
Tambahkan button, properties, id SecondButton, onClick onclick2 (cara untuk
membuat onClick selain menggunakan xml)
Tambahkan PlainText, properties, width  250dp, id  firstInput
---MainActivity.java---
--onCreate—{}
Public void onClick(View view){
//tekan alt+enter untuk mengimpor intent dsb
//membuat intent dengan parameter (this, class yang akan muncul jika button diklik)
Intent i = new Intent(this,ActivityTwo.class);
//membuat referensi dari PlainText firstInput
Final EditText firstInput = (EditText) findViewById (R.id.firstInput);
//mendapatkan text dari user di firstInput dan mengkonversi ke string
String userMessage = firstInput.getText().toString();
//pass on the message ke activity kedua menggunakan intent (“namaMessage”, text
yang akan dipindahkan ke activity kedua)
i.putExtra(“firstMessage”,userMessage);
startActivity(i);
}
----ActivityTwo.java---
--onCreate—
Bundle firstData = getIntent().getExtras();
//print message yang akan dipindahkan ke activity kedua
//jika user tidak memasukkan apa-apa maka tdk akan keluar apa apa
If(firstData == null){
Return;
}
//mendapatkan message dari activity pertama dan disimpan kedalam string
String firstMessage = firstData.getString(“firstMessage”);
//mendapatkan referensi dari text yang ada di activity kedua
Final TextView secondText = (TextView) findViewById(R.id.SecondText);
//mengubah text di activity kedua menjadi text yang telah dimasukkan user di
activity pertama
secondText.setText(firstMessage);
hasil  di activity pertama ada text yang berbunyi First Activity dan ada input user
yang bila ada input yang dimasukkan dan ditekan tombol dibawahnya akan
membuka activity kedua dan hasil input yang telah diketik ditunjukkan disana
 cara mengirim Broadcast Intents (api 15)  mengirim message broadcast dari 1 app
ke app lain
----SendBroadcast app----
Tambahkan Button, properties, text  Send Broadcast, id  sendButton, onClick 
sendOutBroadcast
---MainActivity.java---
--onCreate—{}
Public void sendOutBroadcast (View view){
Intent i = new Intent ();
//melakukan intent dari aplikasi ini (nama app  com.username.namaAplikasi) bisa
dilihat di paling atas kiri
i.setAction(“com.example.SendBroadcast”);
i.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
sendBroadcast(i);
}
----RecieveBroadcast app----
No activity
App folder, java, klik kanan com.example.blablabla, new, other, broadcast receiver,
centang kedua checkbox, finish
---myReceiver.java---
--onReceive--  hapus semua code di dalamnya
//LENGTH_LONG merupakan durasi broadcast yg berati durasinya lama, broadcast
received merupakan message nya
Toast.makeText(context,”Broadcast Received”, Toast.LENGTH_LONG).show();
Manifest folder, AndroidManifest.xml
---AndroidManifest.xml---
--di dalam <receiver/>--
//membuat intent filter (android:name = nama app yang mengirim broadcast)
<intent-filter>
<action android:name=”com.example.application.sendBroadcast”>
</action>
</intent-filter>
Run receiveBroadcast app lalu run sendBroadcast app, tekan tombol send broadcast
maka akan muncul message broadcast received
 threads (biasanya untuk game) (??) urutan eksekusi kode dari atas ke bawah
tambahkan LargeText, properties, text  hello, id  myText
tambahkan Button, properties, text  click me, id  myButton, onClick 
ClickMyButton
---MainActivity.java---
//import android.os.Handler; import android.os.Message;
//handler merupakan main thread yang akan dieksekusi
Handler handler = new Handler (){
//override method handleMassage
Public void handleMessage(Message mag){
//kode dibawah tidak boleh dimasukkan dalam runnable karena harus dieksekusi di
depan
TextView myText = (TextView) findViewById(R.id.myText);
myText.setText(“Button Clicked”);
}}
--onCreate—{}
Public void ClickMyButton(View view){
//membuat runnable (kode yang akan dieksekusi di background/belakang atau
thread lain)
Runnable r = new Runnable(){
@override
Publuc void run(){
//menambahkan delay 10 detik (10000 miliseconds) setelah button diklik
Long futureTime = System.currentTimeMillis()+10000;
While (System.currentTimeMillis()<futureTime){
//synchronized digunakan untuk mencegah beberapa threads bertubrukan dengan
satu sama lain
Synchronized (this){
Try{
Wait(futureTime-System.currentTimeMillis());
}
Catch (Exception e){
}}
//memanggil handler
Handler.sendEmptyMessage(0);
}};
//membuat dan memulai thread (nama runnable interface)
Thread myThread = new Thread(r);
myThread.start();
}
}};
Hasil  ada text hello dan sebuah button dan jika button diklik maka setelah 10
detik, text akan berubah menjadi Button Clicked tetapi jika button diklik terus
menerus maka aplikasi akan crash namun jika ada thread handler, app tidak akan
crash
 intent service (??) proses yang dijalankan di background dan user tidak akan
melihat atau berinteraksi dengannya (contoh = kode untuk mendengarkan adanya
message yang datang dan memberi notifikasi dalam message app)
app folder, java,com.blabla, new, java class, nama  MyIntentService
---MyIntentService.java---
Public class MyIntentService extends IntentService{
//membuat tag menggunakan “package name”
Private static final String TAG = “com.blablabla”;
//alt+insert, constructor, tidak menggunakan parameter karena merupakan
constructor
Public MyIntentService()
Super(“MyIntentService”);
{
//alt+insert, override methods, onHandleIntent
@Override
Protected void onHandleIntent(Intent intent){
Log.i(TAG,”The service has started”);
}}
---AndroidManifest.xml---
//diantara activity dan app tag
<service android:name=”.MyIntentService”/>
RelativeLayout, Properties, background  #009900 (random number) hasilnya hijau,
id  FirstText
Tambahkan LargeText, properties, text First Activity
Tambahkan Button, properties, id  FirstButton
---content_main.xml---
<TextView
Blablabla
/>
<Button
Blablabla
Android:onClick=”onClick”
/>
App folder, java, com.blabla, new, activity, blank activity, jangan centang Launcher
Activity dan Use as a Fragment, name  content_activity_two.xml
RelativeLayout di content_activity_two.xml, properties, background  #006699
(background menjadi biru)
Tambahkan large text, properties, text  Second Activity, id  SecondText
Tambahkan button, properties, id SecondButton, onClick onclick2 (cara untuk
membuat onClick selain menggunakan xml)
Tambahkan PlainText, properties, width  250dp, id  firstInput
---MainActivity.java---
--onCreate—{
Intent intent = new Intent(this, MyIntentService.class);
startService(intent);
Intent i = new Intent(this, MyService.class);
startService(i);
Public void onClick(View view){
//tekan alt+enter untuk mengimpor intent dsb
//membuat referensi dari PlainText firstInput
Final EditText firstInput = (EditText) findViewById (R.id.firstInput);
//mendapatkan text dari user di firstInput dan mengkonversi ke string
String userMessage = firstInput.getText().toString();
//pass on the message ke activity kedua menggunakan intent (“namaMessage”, text
yang akan dipindahkan ke activity kedua)
i.putExtra(“firstMessage”,userMessage);
startActivity(i);
}
----ActivityTwo.java---
--onCreate—
Bundle firstData = getIntent().getExtras();
//print message yang akan dipindahkan ke activity kedua
//jika user tidak memasukkan apa-apa maka tdk akan keluar apa apa
If(firstData == null){
Return;
}
//mendapatkan message dari activity pertama dan disimpan kedalam string
String firstMessage = firstData.getString(“firstMessage”);
//mendapatkan referensi dari text yang ada di activity kedua
Final TextView secondText = (TextView) findViewById(R.id.SecondText);
//mengubah text di activity kedua menjadi text yang telah dimasukkan user di
activity pertama
secondText.setText(firstMessage);
java folder, new, service, service, nama MyService, centang kedua box
---MyService.java---
//Menambahkan tag message
Private static final String TAG = “com.blabla”;
//membuat constructor
Public MyService(){
}
//alt+insert, override methods, onStartCommand, onDestroy, ok
//onStartCommand method untuk menjalankan kode yang ada di dalamnya sebagai
service
@Override
Public int onStartCommand(Intent intent, int flags, int startId){
Log.i(TAG,”OnStart called”);
//membuat thread baru
Runnable r = new Runnable(){
@override
Public void run(){
For (int i = 0; i<5,i++){
Long futureTime = System.currentTimeMillis()+5000;
While(System.currentTimeMillis()<futureTime){
Synchronized(this){
Try{
Wait(futureTime-System.currentTimeMillis())
Log.i(TAG,”Service is running”);
}catch (Exception e){
}}}}}};
Thread myThread = new Thread(r);
myThread.start();
//run service lagi saat service crash
return Service.START_STICKY;
}
//onDestroy untuk menjalankan kode di dalamnya saat service di destroy atau
berakhir
@Override
Publuc void onDestroy(){
Log.i(TAG,”onDestroy called”);
}
Hasil  message dari service akan ada di log
 Bound service  service yang berhubungan dengan app, misal kalau app mati
service juga mati
Tambahkan LargeText, id  myText
Tambahkan Button, id  myButton, onClick  showTime
Java.com.blabla, new, service, MyService, centang box
---MyService.java---
Private final IBinder myBinder = new MyLocalBinder();
Public MyService(){
}
Public class MyLocalBinder extends Binder{
MyService getService(){
Return myService.this;
}}
Public String getCurrentTime(){
//mendapatkan waktu saat ini (jam:menit:detik)
SimpleDateFormat df = new SimpleDateFormat(“HH:mm:ss”, Locale.US);
Return (df.format(new Date()));
}
@Override
Public IBinder onBind(Intent intent){
Return myBinder;
}
---MainActivity.java---
Import blabla
Import com.blabla (package name).MyService.MyLocalBinder;
--class MainActivity—
MyService myService;
Boolean isBound = false;
Publuc void showTime(View view){
String currentTime = myService.getCurrentTime();
TextView myText = (TextView) findViewById(R.id.myText);
myText.setText(currentTime);
}
--onCreate{}—
Intent i = new Intent(this, MyService.class);
//harus ditambahkan saat membuat bound service
bindService(i,myConnection, Context.BIND_AUTO_CREATE);
--onCreateOption{}—
--onOptiomsItemSelected{}—
Private ServiceConnection myConnection = new ServiceConnection(){
//kode yang akan dieksekusi saat service tersambung
@Override
Public void onServiceConnected(ComponentName name,IBinder service){
MyLocalBinder binder = (MyLocalBinder) service;
myService = binder.getService();
isBound = true;
}
//kode yang akan dieksekusi saat service disconnected
@Override
Public void onServiceDisconnected(ComponentName name){
isBound = false;
}}}
Hasil –> ada TextView dan Button, jika Button diklik maka TextView akan berubah
menjadi waktu saat ini
 List View  menampilkan sesuatu dalam sebuah list
copy paste image yang akan ditampilkan di drawable
---content_main.xml---
<ListView
Android:layout_width=”match_parent”
Android:layout_height=”match_parent”>
</ListView>
Design, ListView, properties, id  myListView
//akan ada sebuah ListView yang didalamnya ada tulisan item 1, subitem, item 2,
dst
---MainActivity.java---
--class MainActivity extends Activity—
--onCreate—
String[] fruits = (“Apple”,”Orange”,”peach”,”mango”);
//untuk menyambungkan string array dan ListView di activity dibutuhkan
ListAdaptor (new tipedata yang akan disambungkan +Adaptor<tipedata
item>(this ,jenis layout, nama array yang akan disambungkan))
ListAdapter myAdapter = new CustomAdapter(this,fruits);
//setAdapter untuk mengubah isi ListView menjadi myAdapter(array fruits)
myListView.setAdapter(myAdapter);
//action listener
myListView.setOnItemClickListener(
new AdapterView.OnItemClickListener(){
@Override
Public void onItemClick(AdapterView<?> parent, View view, int position, long id){
//mendapatkan item dalam ListView dan memasukkannya dalam sebuah String
String fruit = String.valueOf(parent.getItemAtPosition(position));
//menampilkan di activity menggunakan Toast
Toast.makeText(MainActivity.this, fruit, Toast.LENGTH_LONG).show();
}}};}
Klik kanan layout, new, layout resource file, file name  custom_row, root element
 LinearLayout,ok
---custom_row.xml---
--<LinearLayout---
Android:orientation=”horizontal”
>
</LinearLayout>
Tambahkan ImageView ke LinearLayout (geret ImageView ke component tree
LinearLayout di samping kanan)
//src merupakan source image yg dalam kasus ini terletak dalam drawable folder
dan bernama fruit.png
imageView, properties, src  @drawable/fruit, layout:width  80dp, layout:weight
 80dp, layout:margin, all  5dp, id  myImage
tambahkan Large Text, properties, layout:margin, all 5dp, id  myText
app folder, java, klik kanan com.blabla, new, Java Class, nama  CustomAdapter,ok
---CustomAdapter.java---
Class CustomAdapter extends ArrayAdapter<String>{
//alt+insert, constructor, ArrayAdapter yg plg atas punya 2 parameter, ok
Public CustomAdapter(Context context, String[] fruits){
Super(context, R.layout.custom_row, fruits);
}
//alt+insert, override methods, getView,ok (membuat custom adaptor dan
menyesuaikannya dengan array fruits
@Override
Public View getView(int position, View convertView, ViewGroup parent){
//mendapat referensi dari ListView yang ada di activity
LayoutInflater myInflater = LayoutInflater.from(getContext());
View CustomView = myInflater.inflate(R.layout.custom_row,parent,false);
//mendapatkan referensi item tergantung dari posisinya
String singleFruitItem = getItem(position);
//mendapatkan referensi dari TextView dan Image
TextView myText = (TextView) CustomView.findViewById(R.id.myText);
ImageView myImage = (ImageView) CustomView.findViewById(R.id.myImage);
myText.setText(singleFruitItem);
myImage.setImageResource(R.drawable.fruit);
Return CustomView;
}}
Hasil  ada ListView yang berisi buah buahan dari string fruits dan jika item di
ListView ditekan maka akan menampilkan message yang isinya item tsb, setuap item
memiliki gambar dari drawable
 Cara save data menggunakan SQLite  save data yang dimasukkan semua user yg
nantinya bisa diakses (contoh : barang2 yg dijual di online shop)
Tambahkan PlainText, properties, layout:width  300dp, id  myInput
Tambahkan Button, properties, text  add, id  addButton, onClick 
addButtonClick
Tambahkan Button, properties, text  delete, id  deleteButtin, onClick 
deleteButtonClick
Tambahkan LargeText, properties, id  myText
App folder, klik kanan com.blabla, new, java class, nama  Products, ok
---Products.java---

You might also like