bagaimana cara memasukkan tampilan ke presenter menggunakan Dagger2 untuk Android?

Saya ingin inject view (Activity object) menjadi Presenter. Saat ini saya sedang mengatur tampilan secara manual menggunakan setter kelas Presenter. Bagaimana cara mencapai ini menggunakan Dagger? Bisakah Anda menunjukkan kepada saya contoh kode bagaimana melakukannya?

Beginilah Aktivitas utama menciptakan Presenter sampai sekarang

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

**Kode kelas presenter : **

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

Kode lengkap di sini :

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


person Natesh bhat    schedule 15.01.2020    source sumber
comment
Posting modul presenter Anda!   -  person Santanu Sur    schedule 15.01.2020
comment
Saya telah memberikan tautan ke proyek saya..   -  person Natesh bhat    schedule 16.01.2020


Jawaban (2)


Saya akan menuliskan langkah-langkahnya

Pertama, Anda perlu menambahkan kelas modul

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

Demikian pula tambahkan kelas modul untuk ToastPresenter

Setelah itu, tambahkan referensi kelas modul yang baru ditambahkan di kelas AppComponent

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

Dan terhibur dengan keajaiban belati/suntikan.

Bagian 2 di Jawa

@Singleton
@Component(modules = {AppModule.class, ToastPresenterModule.class, CountPresenterModule.class}) {
   void inject(MainActivity mainActivity);
}
person Attiq ur Rehman    schedule 15.01.2020
comment
bisakah Anda memberikan kode Java untuk menambahkan referensi bagian modul yang baru ditambahkan dari kode ... - person Natesh bhat; 15.01.2020

Halo, ini solusi saya di Kotlin. Pertama, Anda akan membuat antarmuka

antarmuka Kontrak{

    interface Presenter{
    fun setView(view: View)
}

}

lalu di dalam presenter, Anda akan mengimplementasikannya (di antara metode lain yang harus dimiliki presenter Anda (setelah Anda menentukannya terlebih dahulu di antarmuka itu))

: Contract.Presenter 

di dalam presenter, Anda akan membuat tampilan init var akhir bertipe View

 private lateinit var view: View

lalu di dalam presenter dalam implementasi antarmuka presenter, Anda akan mendefinisikan ini

override fun setView(view: View) {
    this.view = view
}

di MainActivity yang akan Anda miliki

@Suntikkan lateinit var presenter: Contract.Presenter

dan di resume, Anda akan mengatur ini sebagai tampilan

override fun onResume() {
    super.onResume()
    presenter.setView(this)
}

itu semuanya,

Selamat membuat kode

person Nenad Štrbić    schedule 21.05.2021