2017-12-12 26 views
0

최근 MVVM 패턴을 사용하여 LiveData 및 Room을 Android 앱에 사용하기 시작했습니다.ViewModel에서 AsyncTask를 사용하여 ProgressDialog를 실행하는 방법

ViewModel에서 나는 AsyncTask을 사용하여 db로부터 데이터를 가져옵니다. 하지만 때때로 DB에서 몇 가지 더 무거운 물건을로드합니다 (수천 가지 항목이있는 목록처럼). 일반적으로 AsyncTask에 ProgressDialog를 추가하고 onPreExecute 메서드에서 시작하고 onPostExecute에서 닫습니다.

new ProgressDialog(Context ctx) 

내가보기 사이의 분리 (Activity)과 ViewModel에 대해 읽고 나는 ViewModel 수업 활동 컨텍스트를 사용하지 않도록했습니다 그러나해서 ProgressDialog는 Context가 필요합니다. 그렇다면 어떻게하면 내 ViewModel에 활동 컨텍스트가 없어도 달성 할 수 있습니까?

아마도 다른 접근 방식을 사용해야합니까?

답변

0

interface UIInteractor{ 
    void showProgress(String message); 
    void hideProgress(); 
} 

에서 구현보기와 상호 작용하는 인터페이스를 만들기위한 https://github.com/googlesamples/android-architecture/tree/dev-todo-mvvm-live을 확인할 수 있습니다

(listener 사용) 대화 상자를 보여 Activity에 알릴 수 있습니다 액티비티는 뷰 모델을 생성하는 동안 인스턴스를 전달한 다음 뷰 모델

에서 호출합니다.
class YourActivity extends UIInteractor{ 
    @Overrdie 
    void showProgress(String message){ 
     //init and show progress with message 
    } 
    @Override 
    void hideProgress(){ 
     //Hide message 
    } 

    @Override 
    public void onCreate(Bunlde bundle){ 
    ... 
    yourVeiwModel = new YourViewModel(this); 

    } 
}