2017-12-12 10 views
0

私は最近MVVMパターンをLiveDataとAndroidアプリで使用するようになりました。ViewModelでAsyncTaskを使用してProgressDialogを実行する方法

私のViewModelでは、AsyncTaskを使用してdbからデータを取得します。 しかし、時にはデータベースから何か重いもの(数千アイテムのリストのようなもの)を読み込むことがあります。通常、私はAsyncTaskにProgressDialogを追加し、それをonPreExecuteメソッドで起動し、onPostExecuteで閉じます。

new ProgressDialog(Context ctx) 

私はビュー間の分離(Activity)とViewModelについて読み、私はViewModelクラスでの活動のコンテキストを使用してはならないことをしました:しかしは、ProgressDialogはContextが必要です。どうすれば私のViewModelにアクティビティのコンテキストを持たなくてもそれを達成できますか?

多分私は別のアプローチを使用する必要がありますか?

答えて

0

Activityの中に進行状況の表示/非表示ダイアログを書くことができます。
その後ViewModelは(listenerを使用して)ダイアログを表示するActivityに通知することができ

また、詳細
そしてexample using a listener to notify and pass data

0

ビュー

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

での実装と対話するためのインタフェースを作成するためにhttps://github.com/googlesamples/android-architecture/tree/dev-todo-mvvm-liveを確認することができますアクティビティを作成し、そのインスタンスをビューモデルの作成中に渡してから、ビューモデルから呼び出す

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); 

    } 
} 
関連する問題