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

in kr •  7 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

참고 예제

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

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

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