0

クリーン アーキテクチャを使用しているアプリを開発しています。プレゼンターでは、メソッド onCompleted に何かが来ると、Main アクティビティから関数を呼び出す必要があります。これは私のプレゼンターです:

public class CheckInPresenter implements Presenter {

    UseCase postCheckInUseCase;
    Context context;

    @Inject
    CheckInPresenter(@Named("putCheckIn") UseCase postCheckInUseCase){
        this.postCheckInUseCase = postCheckInUseCase;
    }

    public void initialize(){this.initializeCheckIn();}
    public void initializeCheckIn(){this.putCheckIn();}
    public void putCheckIn(){
        this.postCheckInUseCase.execute(new CheckInSubscriber());

    }

    @Override
    public void resume() {

    }

    @Override
    public void pause() {

    }

    @Override
    public void destroy() {

    }
    private final class CheckInSubscriber extends DefaultSubscriber<EventEntity>{
        @Override
        public void onCompleted() {

            Log.d("onCompleted", "OnCompleted");
        }

        @Override
        public void onError(Throwable e) {
            Log.d("onError", "OnError: " + e.getMessage());
        }

        @Override
        public void onNext(EventEntity eventEntity) {

            Log.d("onNext", "OnNext");
        }
    }
}

そして、これは私が呼び出さなければならない MainActivity からの私の関数です:

public void getDataForToolbar() {
        SharedPreferences sharedPreferences = getSharedPreferences(getResources().getString(R.string.Account_json), Context.MODE_PRIVATE);
        final String account = sharedPreferences.getString(getResources().getString(R.string.account_json), null);

        if (account != null) {
            Gson gson = new Gson();
            mAccount = gson.fromJson(account, AccountModel.class);

            for (CompanyModel com : mAccount.getCompanies()) {
                String name = com.getName();
                company_name.setText(name);
                logo_url = com.getLogo_url();
            }
            if (logo_url == null || logo_url.isEmpty()) {
                Picasso
                        .with(this)
                        .load(R.drawable.default_company)
                        .resize(70, 58)
                        .transform(new RoundedTransformation(8, 0))
                        .into(toolbarImage);
            } else {
                picassoLoader(this, toolbarImage, logo_url);
            }
            String username = mAccount.getUsername();
            if(mAccount.getStatus()){
                aUsername.setText(username + "/" + getResources().getString(R.string.on_duty));
                aUsername.setBackgroundColor(ContextCompat.getColor(mContext, R.color.colorGreen));
            }else{
                aUsername.setText(username + "/" + getResources().getString(R.string.off_duty));
                aUsername.setBackgroundColor(ContextCompat.getColor(mContext, R.color.colorWhite));
            }

        }
    }

この関数を Presenter の onCompleted メソッドに呼び出す方法を教えてもらえますか? 前もって感謝します。

4

2 に答える 2

0

インターフェイス IView を作成し、Activity を作成してそれを実装します。In IView create メソッドvoid getDataForToolbar();

Dagger 2 を使用している場合は、Dagger モジュールのコンストラクターを IView で更新し、そのプロバイダー メソッドを作成して、このモジュールで提供し@Injectます。CheckInPresenterCheckInPresenter

IViewのコンストラクターに配置し、Dagger モジュールCheckInPresenterのプロバイダー メソッドを更新し、Dagger コンポーネントの初期化を.CheckInPresenterActivity

たとえば、次のようになります。

public class YourActivity implements IView {
    ...
}

@Module
public class YourModule {

    private IView view;

    public YourModule(IView view) {
        this.view = view;
    }

    @Provides 
    public IView provideView() {
        return view;
    }

    @Provides 
    @YourScope
    public Presenter providePresenter() {
        return new YourPresenter(view);
    }
}

既存のプレゼンターとモジュールを IView で完成させるだけです。その後、onCompletedメソッドを呼び出しますview.getDataForToolbar()

于 2016-10-13T09:33:43.903 に答える
0

アクティビティの関数を別のオブジェクトから呼び出したい場合は、アクティビティの参照をそのオブジェクトに渡す必要があります。これは、Activity パラメーターをプレゼンターのコンストラクターに追加する必要があることを意味します。

サイドノート

あなたが実装しているものは、多くの場所 (Google による公式 MVP チュートリアルを含む) で「クリーン アーキテクチャ」と呼ばれていることは知っていますが、「クリーン アーキテクチャ」について別の見解を得るために、この件に関する私の投稿を読むことをお勧めします。 " Android では次のようになります。

Android のアクティビティが UI 要素ではない理由

Android の MVC および MVP アーキテクチャ パターン

于 2016-10-13T09:21:32.657 に答える