[Andoird] 3. MVVM에 사용 될 기초 Activity클래스 및 View인터페이스 만들기

in #kr6 years ago (edited)

android_title_image.jpg

기초 클래스 및 인터페이스

안드로이드 프로젝트를 Empty Activity로 생성하면 다음과 같이 AppCompatActivity를 상속받는 MainActivity가 생성됩니다.

public class MainActivity extends AppCompatActivity {

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

MainActivity를 바로 사용해도 되지만 MVVM을 사용하거나 다른 중복된 작업이 필요한 경우 모든 액티비티의 기본이 되는BaseActivity를 만드는게 효율적입니다.

BaseActivity

기초 클래스는 [추상 클래스 + 제네릭 + BaseView]을 기본 구성으로 작성했습니다.

public abstract class BaseActivity<DB extends ViewDataBinding> 
        extends AppCompatActivity 
        implements BaseView {
        ...
        }

추상 메소드를 Sub클래스에서 사용하기 위해서는 추상 클래스 선언이 꼭 필요합니다.

  • 추상 메소드
    Sub클래스에서 꼭 작성이 필요한 부분을 정의했습니다.
@LayoutRes
public abstract int getLayoutRes();
public abstract void setViewModel();
public abstract void setToolbar();

[getLayoutRes]는 activity layout id를 가져옵니다.
[setViewModel]는 binding에 ViewModel를 적용(Bind)해 줍니다.
[setToolbar]는 toolbar의 상태를 설정합니다.

  • 제너릭
    해당 액티비티의 데이터바인딩을 쉽게 초기화하기 위해 사용되었습니다.
BaseActivity<DB extends ViewDataBinding>
public DB binding;
binding = DataBindingUtil.setContentView(this, getLayoutRes());

액티비티에서 데이터바인딩 초기화는 꼭 DataBindingUtil.setContentView() 함수를 사용해야 합니다.

BaseView

ViewModel에서 참조로 사용 될 기본 인터페이스입니다.

public interface BaseView {
    void finishView();
    void backView();
}

BaseView는 BaseActivity에서 정의하면 됩니다.

@Override
 public void finishView() {
    finish();
 }

@Override
public void backView() {
    onBackPressed();
 }

작성하는 액티비티에서만 참조가 필요할 경우 다음과 같이 BaseView 인터페이스를 상속한 다른 인터페이스를 사용하면 됩니다.

public interface MainView extends BaseView {
    void makeToast();
}

BaseView의 참조는 BaseActivity에 정의되어있기 때문에 따로 작성할 필요는 없습니다.

예제 AndroidStudy

참고 예제

Sort:  

안드로이드 앱 개발해보고 싶었는데 감사합니다.

앞으로 더 좋은 자료 많이 올리도록 하겠습니다!