Как внедрить представление в презентере, используя Dagger2 для android? - PullRequest
0 голосов
/ 15 января 2020

Я хочу inject view (Activity object) в Presenter. Прямо сейчас я вручную устанавливаю представление, используя установщик класса Presenter. Как мне добиться этого с помощью Dagger? Можете ли вы показать мне пример кода, как это сделать?

Вот как основное задание создает докладчика на данный момент

public class MainActivity extends AppCompatActivity implements CountPresenter.View, ToastPresenter.View {

    @Inject
    CountPresenter countPresenter;
    @Inject
    ToastPresenter toastPresenter;
    TextView countText;
    Toast toast;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        countText = findViewById(R.id.text_count);

        DaggerToastPresenterComponent.create().inject(this);
        DaggerCountPresenterComponent.create().inject(this);
        countPresenter.setView(this);
        toastPresenter.setView(this) ;

        findViewById(R.id.button_count).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                countPresenter.incrementCount();
            }
        });

        findViewById(R.id.button_toast).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                toastPresenter.handleToastButtonClick();
            }
        });
    }
}

** Код класса докладчика: **

public class CountPresenter {
    private Counter counter ;


    public void setView(View view) {
        this.view = view;
    }

    private View view ;

    @Inject
    public CountPresenter() {
        counter =  Counter.getInstance() ;
    }

    public void incrementCount(){
        counter.setCount(counter.getCount()+1);
        view.setCounterText(counter.toString());
    }

    public interface View {
        void setCounterText(String val) ;
    }
}

Полный код здесь:

https://github.com/nateshmbhat/FresherAssignment2020/tree/nateshmbhat/Apps/CounterApp_MVP_Dagger/app/src/main/java/com/techy/nateshmbhat/contacto

1 Ответ

1 голос
/ 15 января 2020

Я собираюсь записать шаги

Сначала вам нужно добавить модуль class

@Module
class CountPresenterModule {
    @Provides
    @Singleton
    fun providCountPresenter(): CountPresenter.View {
        return CountPresenter()
    }
}

Аналогичным образом добавьте класс модуля для ToastPresenter

После этого добавьте ссылку на вновь добавленный класс модуля в классе AppComponent

@Singleton
@Component(modules = [AppModule::class, .....,ToastPresenterModule::class, CountPresenterModule::class]){
    fun inject(mainActivity: MainActivity)
}

и получите удовольствие от магов c кинжала / инъекции.

Часть 2 в Java

@Singleton
@Component(modules = {AppModule.class, ToastPresenterModule.class, CountPresenterModule.class}) {
   void inject(MainActivity mainActivity);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...