SlideShare a Scribd company logo
1 of 33
MVPDesign Pattern
Workshop IMAStudio
2
Ahmad Arif Faizin
Android Developer & Trainer at IMA Studio
Android Certified Application Developer v7 by ATC
https://www.linkedin.com/in/ahmad-arif-faizin/
https://medium.com/@ahmadariffaizin
085740482440
MVC vs MVP
Why do you need MVP?
• Text
Title
• Text • Text
Why? Pros, Cons
•Maintainbility
•Testability
Why? Pros, Cons
•Redundancy
•Takes Time
Let's Get Started
• Text
Create new Project > Empty Activity
Create this
Design
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="30dp"
tools:context="net.krearive.javamvp.MainActivity">
<EditText
android:id="@+id/ed_alas"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/editbox_background_normal"
android:gravity="center"
android:hint="alas" />
<EditText
android:id="@+id/ed_tinggi"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/editbox_background_normal"
android:gravity="center"
android:hint="tinggi" />
<Button
android:id="@+id/btn_hitung"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:background="@color/colorAccent"
android:text="Hitung"
android:textColor="@android:color/white" />
<TextView
android:id="@+id/tv_hasil"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="hasil"
android:textColor="#476efd"
android:textSize="48dp" />
</LinearLayout>
public class MainActivity extends AppCompatActivity {
private EditText edAlas, edTinggi;
private Button btnHitung;
private TextView tvHasil;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edAlas = (EditText) findViewById(R.id.ed_alas);
edTinggi = (EditText) findViewById(R.id.ed_tinggi);
btnHitung = (Button) findViewById(R.id.btn_hitung);
tvHasil = (TextView) findViewById(R.id.tv_hasil);
}
}
btnHitung.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Double alas = Double.valueOf(edAlas.getText().toString());
Double tinggi = Double.valueOf(edTinggi.getText().toString());
Double luas = alas * tinggi;
tvHasil.setText(luas.toString());
}
});
Now, let's move to MVP
Flow
Pertama, Definisikan dulu fungsi proses
apa saja yang akan ada di halaman itu.
Kedua, Definisikan respon terhadap view
yang terjadi setelah proses tersebut
dijalankan.
btnHitung.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Double alas = Double.valueOf(edAlas.getText().toString());
Double tinggi = Double.valueOf(edTinggi.getText().toString());
Double luas = alas * tinggi;
tvHasil.setText(luas.toString());
}
});
btnHitung.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Double alas = Double.valueOf(edAlas.getText().toString());
Double tinggi = Double.valueOf(edTinggi.getText().toString());
}
});
Pertama, Definisikan dulu fungsi proses
apa saja yang akan ada di halaman itu,
misal hitungLuas()
Kedua, Definisikan respon terhadap view
yang terjadi setelah proses tersebut
dijalankan, misal updateTextHasil()
3 class dasar MVP:
MainPresenter : sebuah interface yang berisi nama fungsi-
fungsi logika dari class MainActivity. Menghubungkan View
dengan Presenter.
MainView : Sebuah interface yang berisi fungsi2 yang akan
dijalankan pada mainActivity, menghubungkan Presenter ke
View.
MainPresenterImp : sebuah class yang
mengimplementasikan fungsi2 yang ada pada
MainPresenter.
public interface MainPresenter {
void hitungLuas(Double alas, Double tinggi);
}
public interface MainView {
void updateTextHasil(Double luas);
}
public class MainPresenterImp implements MainPresenter {
//1 create constructor
MainView mainView;
public MainPresenterImp(MainView mainView) {
this.mainView = mainView;
}
//2 implement MainPresenter
@Override
public void hitungLuas(Double alas, Double tinggi) {
Double luas = alas * tinggi;
mainView.updateTextHasil(luas);
}
}
Setting Presenter Pada MainActivity.java
1. Deklarasi variabel
private MainPresenterImp presenter;
2. Inisialisasi terlebih dahulu dengan membuat method initPresenter()
private void initPresenter() {
presenter = new MainPresenterImp(this);
}
3. Ganti proses logika yang sebelumnya langsung dengan presenter.
btnHitung.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Double alas = Double.valueOf(edAlas.getText().toString());
Double tinggi = Double.valueOf(edTinggi.getText().toString());
presenter.hitungLuas(alas, tinggi);
}
});
Setting View Pada MainActivity.java
1. Impliment Class ke MainView
public class MainActivity extends AppCompatActivity implements MainView
2. Maka akan merah, Alt+Enter kemudian Implement Method, maka akan muncul
method updateTextHasil
@Override
public void updateTextHasil(Double luas) {
tvHasil.setText(luas.toString());
}
btnHitung.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Double alas = Double.valueOf(edAlas.getText().toString());
Double tinggi = Double.valueOf(edTinggi.getText().toString());
presenter.hitungLuas(alas, tinggi);
}
});
}
private void initPresenter() {
presenter = new MainPresenterImp(this);
}
@Override
public void updateTextHasil(Double luas) {
tvHasil.setText(luas.toString());
}
private void initView() {
Setting View Pada MainActivity.java
1. Impliment Class ke MainView
public class MainActivity extends AppCompatActivity implements MainView
2. Maka akan merah, Alt+Enter kemudian Implement Method, maka akan muncul
method updateTextHasil
@Override
public void updateTextHasil(Double luas) {
tvHasil.setText(luas.toString());
}
Exercise
Buat proses tambahan untuk cek jika EditText
kosong maka muncul Toast
Cek Project in Github
https://github.com/arifaizin/AndroidSimpleMVP
Thank
You
https://www.twoh.co/2016/01/03/belajar-membuat-aplikasi-
android-dengan-teknik-mvp-model-view-presenter/
https://kudo.co.id/engineering/2016/11/22/penerapan-mvp-
di-android/

More Related Content

Similar to Workshop MVP Android Pattern

Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic Servlets
Individual Consultants
 
Octav android mysql
Octav android mysqlOctav android mysql
Octav android mysql
rikysp
 
Web mvc dengan java jsp seri 1
Web mvc dengan java   jsp seri 1Web mvc dengan java   jsp seri 1
Web mvc dengan java jsp seri 1
Zaenal Arifin
 
Membuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan phpMembuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan php
Cahya Dwiana SN
 
Jeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced ServletsJeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced Servlets
Individual Consultants
 
Jamal aplikasicrud
Jamal aplikasicrudJamal aplikasicrud
Jamal aplikasicrud
males Aja
 
Pertemuan 11 thread dan asyntask
Pertemuan 11 thread dan asyntaskPertemuan 11 thread dan asyntask
Pertemuan 11 thread dan asyntask
heriakj
 

Similar to Workshop MVP Android Pattern (20)

Jeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic ServletsJeni Web Programming Bab 2 Basic Servlets
Jeni Web Programming Bab 2 Basic Servlets
 
Yii2 fundamentals bagian 1
Yii2 fundamentals   bagian 1Yii2 fundamentals   bagian 1
Yii2 fundamentals bagian 1
 
Octav android mysql
Octav android mysqlOctav android mysql
Octav android mysql
 
Web mvc dengan java jsp seri 1
Web mvc dengan java   jsp seri 1Web mvc dengan java   jsp seri 1
Web mvc dengan java jsp seri 1
 
Tutorial Cara Membuat Aplikasi RSS Android - creatorb
Tutorial Cara Membuat Aplikasi RSS Android - creatorbTutorial Cara Membuat Aplikasi RSS Android - creatorb
Tutorial Cara Membuat Aplikasi RSS Android - creatorb
 
Belajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan VolleyBelajar Android PHP MySQL Login dengan Volley
Belajar Android PHP MySQL Login dengan Volley
 
Membuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan phpMembuat mvc framework sederhana dengan php
Membuat mvc framework sederhana dengan php
 
Material design for android (Diggest)
Material design for android (Diggest)Material design for android (Diggest)
Material design for android (Diggest)
 
Praktikum 10
Praktikum 10Praktikum 10
Praktikum 10
 
Pengenalan ReactJS
Pengenalan ReactJS Pengenalan ReactJS
Pengenalan ReactJS
 
Beginner's Guide to React & Redux Development
Beginner's Guide to React & Redux DevelopmentBeginner's Guide to React & Redux Development
Beginner's Guide to React & Redux Development
 
Jeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced ServletsJeni Web Programming Bab 3 Advanced Servlets
Jeni Web Programming Bab 3 Advanced Servlets
 
Tutorial JSON-LD dan RabbitMQ di Java
Tutorial JSON-LD dan RabbitMQ di JavaTutorial JSON-LD dan RabbitMQ di Java
Tutorial JSON-LD dan RabbitMQ di Java
 
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...
Dicoding Developer Coaching #23: Android | Membangun Modern App dengan Jetpac...
 
Jamal aplikasicrud
Jamal aplikasicrudJamal aplikasicrud
Jamal aplikasicrud
 
Laravel View dan Blade.pdf
Laravel View dan Blade.pdfLaravel View dan Blade.pdf
Laravel View dan Blade.pdf
 
Netbeans jasper-tutorial
Netbeans jasper-tutorialNetbeans jasper-tutorial
Netbeans jasper-tutorial
 
Pemrograman Dasar Android
Pemrograman Dasar AndroidPemrograman Dasar Android
Pemrograman Dasar Android
 
Pertemuan 11 thread dan asyntask
Pertemuan 11 thread dan asyntaskPertemuan 11 thread dan asyntask
Pertemuan 11 thread dan asyntask
 
SESI 3 FE.pptx
SESI 3 FE.pptxSESI 3 FE.pptx
SESI 3 FE.pptx
 

More from Ahmad Arif Faizin

More from Ahmad Arif Faizin (20)

Proker Departemen Dakwah dan Syiar 2013.pptx
Proker Departemen Dakwah dan Syiar 2013.pptxProker Departemen Dakwah dan Syiar 2013.pptx
Proker Departemen Dakwah dan Syiar 2013.pptx
 
DKM_2013_BISMILLAH.pptx
DKM_2013_BISMILLAH.pptxDKM_2013_BISMILLAH.pptx
DKM_2013_BISMILLAH.pptx
 
Proker bendahara al muhandis 2013.ppt
Proker bendahara al muhandis 2013.pptProker bendahara al muhandis 2013.ppt
Proker bendahara al muhandis 2013.ppt
 
PPT raker EKONOMI 2013.pptx
PPT raker EKONOMI 2013.pptxPPT raker EKONOMI 2013.pptx
PPT raker EKONOMI 2013.pptx
 
Program Kerja Kaderisasi Al Muhandis 2013
Program Kerja Kaderisasi Al Muhandis 2013Program Kerja Kaderisasi Al Muhandis 2013
Program Kerja Kaderisasi Al Muhandis 2013
 
Departemen Mentoring.pptx
Departemen Mentoring.pptxDepartemen Mentoring.pptx
Departemen Mentoring.pptx
 
ANNISAA' 2013.pptx
ANNISAA' 2013.pptxANNISAA' 2013.pptx
ANNISAA' 2013.pptx
 
PPT KKN PEDURUNGAN 2016.pptx
PPT KKN PEDURUNGAN 2016.pptxPPT KKN PEDURUNGAN 2016.pptx
PPT KKN PEDURUNGAN 2016.pptx
 
Absis UNBK.pptx
Absis UNBK.pptxAbsis UNBK.pptx
Absis UNBK.pptx
 
Dts x dicoding #5 memulai pemrograman kotlin
Dts x dicoding #5 memulai pemrograman kotlinDts x dicoding #5 memulai pemrograman kotlin
Dts x dicoding #5 memulai pemrograman kotlin
 
Dts x dicoding #4 memulai pemrograman kotlin
Dts x dicoding #4 memulai pemrograman kotlinDts x dicoding #4 memulai pemrograman kotlin
Dts x dicoding #4 memulai pemrograman kotlin
 
Dts x dicoding #3 memulai pemrograman kotlin
Dts x dicoding #3 memulai pemrograman kotlinDts x dicoding #3 memulai pemrograman kotlin
Dts x dicoding #3 memulai pemrograman kotlin
 
Dts x dicoding #2 memulai pemrograman kotlin
Dts x dicoding #2 memulai pemrograman kotlinDts x dicoding #2 memulai pemrograman kotlin
Dts x dicoding #2 memulai pemrograman kotlin
 
Dts x dicoding #1 memulai pemrograman kotlin
Dts x dicoding #1 memulai pemrograman kotlinDts x dicoding #1 memulai pemrograman kotlin
Dts x dicoding #1 memulai pemrograman kotlin
 
Dsc how google programs make great developer
Dsc how google programs make great developerDsc how google programs make great developer
Dsc how google programs make great developer
 
First Gathering Sandec
First Gathering SandecFirst Gathering Sandec
First Gathering Sandec
 
Mockup Android Application Template Library
Mockup Android Application Template LibraryMockup Android Application Template Library
Mockup Android Application Template Library
 
Mockup Android Application : Go bon
Mockup Android Application : Go bonMockup Android Application : Go bon
Mockup Android Application : Go bon
 
Lomba Sayembara Logo
Lomba Sayembara LogoLomba Sayembara Logo
Lomba Sayembara Logo
 
Template Video Invitation Walimatul Ursy
Template Video Invitation Walimatul UrsyTemplate Video Invitation Walimatul Ursy
Template Video Invitation Walimatul Ursy
 

Workshop MVP Android Pattern

  • 2. 2 Ahmad Arif Faizin Android Developer & Trainer at IMA Studio Android Certified Application Developer v7 by ATC https://www.linkedin.com/in/ahmad-arif-faizin/ https://medium.com/@ahmadariffaizin 085740482440
  • 4. Why do you need MVP? • Text
  • 5.
  • 10. Create new Project > Empty Activity
  • 12. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:padding="30dp" tools:context="net.krearive.javamvp.MainActivity"> <EditText android:id="@+id/ed_alas" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:drawable/editbox_background_normal" android:gravity="center" android:hint="alas" /> <EditText android:id="@+id/ed_tinggi" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:drawable/editbox_background_normal" android:gravity="center" android:hint="tinggi" /> <Button android:id="@+id/btn_hitung" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="8dp" android:background="@color/colorAccent" android:text="Hitung" android:textColor="@android:color/white" /> <TextView android:id="@+id/tv_hasil" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="hasil" android:textColor="#476efd" android:textSize="48dp" /> </LinearLayout>
  • 13. public class MainActivity extends AppCompatActivity { private EditText edAlas, edTinggi; private Button btnHitung; private TextView tvHasil; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); edAlas = (EditText) findViewById(R.id.ed_alas); edTinggi = (EditText) findViewById(R.id.ed_tinggi); btnHitung = (Button) findViewById(R.id.btn_hitung); tvHasil = (TextView) findViewById(R.id.tv_hasil); } }
  • 14. btnHitung.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Double alas = Double.valueOf(edAlas.getText().toString()); Double tinggi = Double.valueOf(edTinggi.getText().toString()); Double luas = alas * tinggi; tvHasil.setText(luas.toString()); } });
  • 15. Now, let's move to MVP
  • 16. Flow
  • 17. Pertama, Definisikan dulu fungsi proses apa saja yang akan ada di halaman itu. Kedua, Definisikan respon terhadap view yang terjadi setelah proses tersebut dijalankan.
  • 18. btnHitung.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Double alas = Double.valueOf(edAlas.getText().toString()); Double tinggi = Double.valueOf(edTinggi.getText().toString()); Double luas = alas * tinggi; tvHasil.setText(luas.toString()); } });
  • 19. btnHitung.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Double alas = Double.valueOf(edAlas.getText().toString()); Double tinggi = Double.valueOf(edTinggi.getText().toString()); } });
  • 20. Pertama, Definisikan dulu fungsi proses apa saja yang akan ada di halaman itu, misal hitungLuas() Kedua, Definisikan respon terhadap view yang terjadi setelah proses tersebut dijalankan, misal updateTextHasil()
  • 22. MainPresenter : sebuah interface yang berisi nama fungsi- fungsi logika dari class MainActivity. Menghubungkan View dengan Presenter. MainView : Sebuah interface yang berisi fungsi2 yang akan dijalankan pada mainActivity, menghubungkan Presenter ke View. MainPresenterImp : sebuah class yang mengimplementasikan fungsi2 yang ada pada MainPresenter.
  • 23. public interface MainPresenter { void hitungLuas(Double alas, Double tinggi); }
  • 24. public interface MainView { void updateTextHasil(Double luas); }
  • 25. public class MainPresenterImp implements MainPresenter { //1 create constructor MainView mainView; public MainPresenterImp(MainView mainView) { this.mainView = mainView; } //2 implement MainPresenter @Override public void hitungLuas(Double alas, Double tinggi) { Double luas = alas * tinggi; mainView.updateTextHasil(luas); } }
  • 26. Setting Presenter Pada MainActivity.java 1. Deklarasi variabel private MainPresenterImp presenter; 2. Inisialisasi terlebih dahulu dengan membuat method initPresenter() private void initPresenter() { presenter = new MainPresenterImp(this); } 3. Ganti proses logika yang sebelumnya langsung dengan presenter. btnHitung.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Double alas = Double.valueOf(edAlas.getText().toString()); Double tinggi = Double.valueOf(edTinggi.getText().toString()); presenter.hitungLuas(alas, tinggi); } });
  • 27. Setting View Pada MainActivity.java 1. Impliment Class ke MainView public class MainActivity extends AppCompatActivity implements MainView 2. Maka akan merah, Alt+Enter kemudian Implement Method, maka akan muncul method updateTextHasil @Override public void updateTextHasil(Double luas) { tvHasil.setText(luas.toString()); }
  • 28. btnHitung.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Double alas = Double.valueOf(edAlas.getText().toString()); Double tinggi = Double.valueOf(edTinggi.getText().toString()); presenter.hitungLuas(alas, tinggi); } }); } private void initPresenter() { presenter = new MainPresenterImp(this); } @Override public void updateTextHasil(Double luas) { tvHasil.setText(luas.toString()); } private void initView() {
  • 29. Setting View Pada MainActivity.java 1. Impliment Class ke MainView public class MainActivity extends AppCompatActivity implements MainView 2. Maka akan merah, Alt+Enter kemudian Implement Method, maka akan muncul method updateTextHasil @Override public void updateTextHasil(Double luas) { tvHasil.setText(luas.toString()); }
  • 30. Exercise Buat proses tambahan untuk cek jika EditText kosong maka muncul Toast
  • 31. Cek Project in Github https://github.com/arifaizin/AndroidSimpleMVP