MVP, RETROFIT,DAGGER 2 ve RXJAVA Kullanarak Android Uygulama Geliştirme 3

Tam yeni bir projeye geçiyordum ki şu yazı serisini hazır okul bitmişken bitireyim dedim. Proje bitti hayatımda ilk ve son AA ‘yı bitirme projemden aldım :) .
Fazla uzatmadan daha önceki yazımızda Dagger 2 ve RxJava kısmını anlattığım yazıma buradan ulaşabilirsiniz.
Şimdi bu yazımızda tüm activitylerde kullandığımız standart işlemleri (Progress dialog göstermek, mesaj ve hata göstermek vb. ) nasıl bir yerden kontrol edeceğimizi göstereceğim. Artık view kısmına giriyoruz.
Bunun için soyut bir class oluşturmamız lazım. Bu classımızı şu yola oluşturuyoruz;
./ui/base/BaseActivity.class
Not: Oluşturacağımız yapıya bu linkten ulaşabilirsiniz;
Yani tüm Activitylerde yaptığımız View işlemlerini “base” adlı klasörün altında toplayacağız. Peki nedir bu view işlemleri? Sıralayacak olursak şunlar;
- Progress dialog göstermek ve iptal etmek
- Hata göstermek
- Up navigation
- Fragmentleri kontrol etmek
- Activityi öldürmek
- Popupları kontrol etmek
Yani genel olarak uygulamada yapacağınız değişiklikleri tek bir yerden kontrol etmenizi sağlayacak bir yapı oluşturacağız. Yarın öbür gün proje yöneticiniz “ Ya şu mesajları şu şekilde gösterelim” dediği zaman tüm classların içine girip teker teker değişiklik yapacağınıza base acitivtye gelip değişiklik yapmanız yeterli olacak.
Şimdi başlayalım BaseActivitye girişmeden önce genel bir View interfacesi oluşturmamız gerekecek. Sonuç olarak birbirinden bağımsız bir yapı oluşturacağız. Bunun için ;
“./ui/base/MvpView” adında bir dosya oluşturacağız. Bu dosya interface dosyası olacak.
MvpView.class
public interface MvpView {
void showLoading();
void dissmisLoading();
void showMessageToast(String text);
void showError(String text);
void showMessageDialog(String text);
void killActivity();
}
Görüyorsunuz ki view kısmında yapacağımız tüm işlemleri burada belirtiyoruz. Sonra
“./ui/base/BaseActivity” dosyasını oluşturalım. Bu dosyayı “MvpView” ‘dan implement edelim.
public abstract class BaseActivity extends AppCompatActivity implements MvpView { // BaseFragment kısmı hata verecek çünkü daha tanımlanmadı
private ProgressDialog progressDialog; // Kullanacağımız progress dialog
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return super.onSupportNavigateUp(); // Navigation Up için yazılan method
}
@Override
public void showLoading() {
progressDialog = Utils.showLoadingDialog(this); // Progress dialogu göstermek için kullanıyoruz
}
@Override
public void dissmisLoading() {
progressDialog.dismiss(); // Progress dialogu iptal etmek için kullanıyoruz.
}
@Override
public void showMessageToast(String text) {
Toast.makeText(this,text,Toast.LENGTH_SHORT).show(); // Kullanıcıya mesaj göstermek için kullanıyoruz.
}
@Override
public void showError(String text) {
Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); // Kullanıcıya hata göstermek için kullanıyoruz.
}
@Override
public void killActivity() {
this.finish(); // Bazen activityi öldürmek gerekebiliyor. O yüzden kullanıyorum.
}
}
Şimdi bu yapıyı kurduğumuza göre bunların business kısmının bulunacağı Presenter kısmını yazabiliriz.
Nedir bu Presenter kısmı?
Presenter Model ve View arasında bir köprü işlevi görüyor. Yani Model’dan aldığınız veriye göre View’ı yönetiyorsunuz. Hata bulmanızı kolaylaştıran bu yapıya sahip. Kullandıkça ne işe yaracağını daha iyi kavrayacaksınız.
Şimdi şu yola şu interfaceyi oluşturalım;
“./ui/base/MvpPresenter”
MvpPresenter.class
public interface MvpPresenter<V extends MvpView> {
void onAttach(V mvpView);
void onDetach();
}
Sonra şu yola şu classı oluşturalım;
“./ui/base/BasePresenter”
BasePresenter.class
public class BasePresenter<V extends MvpView> implements MvpPresenter<V> {
private Activity activity;
public BasePresenter(Activity activity) {
this.activity=activity;
onAttach((V) activity); // Activityi tanımlıyoruz
ButterKnife.bind(activity); // ButterKnife için kullanıyorum
}
private V mvpView;
public V getMvpView() {
return this.mvpView; // View'ı çağırdığımız method
}
@Override
public void onAttach(V mvpView) {
this.mvpView = mvpView; // Activityi tanımladığımız yer
}
@Override
public void onDetach() {
mvpView=null;
}
}
Artık base UI ‘yı oluşturdunuz. Bundan sonra oluşturacağımız tüm activityler bu yapıdan extend ve implement edilecek. İhtiyacınız olan tüm methodlar artık bu classlarda .
Bundan sonraki yazımızda Bir activity nasıl düzgün bir yapı ile oluşturulur ondan bahsedeceğiz. Umarım ki faydalı bir yazı olmuştur.
Proje Linki : https://github.com/hsmnzaydn/EventeraAndroid
Linkendln hesabım: https://www.linkedin.com/in/serkanozaydin/
Twitter hesabım: https://twitter.com/serkanzaydin