+-+-+ +-+ +-+-+-+-+
|G|O| |4| |H|I|V|E|
+-+-+ +-+ +-+-+-+-+

 --- A GOPHER-LIKE INTERFACE FOR HIVE BLOCKCHAIN ---

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

BY: @jeonghamin | CREATED: Jan. 22, 2018, 3:10 p.m. | VOTES: 5 | PAYOUT: $2.29 | [ VOTE ]

[IMAGE: https://steemitimages.com/DQmSY5jrYYD8htaNrf6ASzrhfg3q1zqkoc3KJK7GEF3P9nB/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 
        extends AppCompatActivity 
        implements BaseView {
        ...
        }

추상 메소드를 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
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

참고 예제

TAGS: [ #kr ] [ #kr-dev ] [ #kr-newbi ] [ #kr-newbie ] [ #android ]

Replies

@tradingideas | Jan. 22, 2018, 4:18 p.m. | Votes: 0 | [ VOTE ]

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

@jeonghamin | Jan. 22, 2018, 10:54 p.m. | Votes: 0 | [ VOTE ]

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

[ BACK TO TRENDING ] [ BACK TO MENU ]
CMD>