Android Dagger.Android 学习

今天记录下 Dagger.Android 的学习内容
一.MVP的学习
1.Model部分,可以定义Model接口类和Model类,bean类,这里仅仅定义了 Model类和Bean类,即MainModel类和Student类

(1)Bean数据–Student类

public class Student {
    private String name = null;

    public Student(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    } 
}

(2)Model 部分

public class MainModel {
    private Student student = null;

    @Inject
    public MainModel() {
        student = new Student("liu");
    }

    public String getName(){
        return student.getName();
    }
}

2.Presenter 部分,定义 Presenter 接口类和 Presenter 类
(1)Presenter接口和view接口定义在一个 Contract类中了

public interface MainContract {

    interface View{
       void getName(String name);
    }

    interface Presenter{
     void showStuName();
    }

}

(2)Presenter部分 里面使用到 view 和 Model,一般两个变量会定义成接口类型

public class MainPresenter implements MainContract.Presenter{
   //一般会定义成接口类型
    private final MainActivity view;
    private final MainModel model;

    @Inject
    public MainPresenter(MainActivity view) {
        Log.e("MainPresenter","MainPresenter");
        if(view == null)
        {
            Log.e("MainPresenter","view is null");
        }
        this.view = view;
        this.model = new MainModel();
    }

    @Override
    public void showStuName() {
        String name = model.getName();
        Log.e("MainPresenter","showStuName");
        view.getName(name);
    }
}

3.View部分,定义View接口类,实现在Actvity中;这样数据就从Model传到了View中,其中Presenter作为承接、操作控制部分

public class MainActivity extends BaseActivity implements MainContract.View {

    @Inject
    MainPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    //Dagger.android 添加注入
        AndroidInjection.inject(this);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        Log.e("MainActivity","onCreate");
        presenter.showStuName();
    }

    @Override
    public void getName(String name) {
        Log.e("MainActivity","onCreate"+ name);
    }
}

同时使用Presenter对象进行数据操作,某些数据通过view接口类函数返回

二.Dagger.android 部分
1.添加Application类,目前我是选择让其继承 DaggerApplication

public class MyApplication extends DaggerApplication {

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Override
    protected AndroidInjector<? extends DaggerApplication> applicationInjector() {
        //添加本代码
        return DaggerMyAppComponent.builder().create(this);
    }
}

2.添加 Application 的 Component 和 Module,这两个可相当于总的集合集,其他定义的Activity和对应的component作为子模块
(1)Application 的 Component部分

@Singleton
//注意下面的总Module---ActivitiesModule
@Component(modules ={
        AndroidInjectionModule.class,
        AndroidSupportInjectionModule.class,
        ActivitiesModule.class
})
 interface MyAppComponent extends AndroidInjector<MyApplication>{

    @Component.Builder
    abstract class Builder extends AndroidInjector.Builder<MyApplication> {

  }
}

(2)Module部分

//这个里面添加各种对应的Activity的子Compontent
@Module(subcomponents = {
        MainActivitySubComponent.class,
})

public abstract class ActivitiesModule {

    @Binds
    @IntoMap
    @ActivityKey(MainActivity.class)
    abstract AndroidInjector.Factory<? extends Activity> bindMainActivityInjectorFactory(
            MainActivitySubComponent.Builder builder);

    //可根据上面的Module中的Activity 仿照MAinActivity 添加 上面的类似代码
}

3.Activity对应的Module和Component,该部分在MVP中的作用就是进一步解耦 Presenter部分,将 Presenter 在 Actvity的部分写到 Module 中(Component 没有什么操作),然后 Module会与Activity 有交互

(1)Actvity的 Component部分

@Subcomponent(modules = MainActivityModule.class)

@ActivityScope
public interface MainActivitySubComponent extends AndroidInjector<MainActivity>{

    @Subcomponent.Builder abstract class Builder extends AndroidInjector.Builder<MainActivity> {

    }
}

(2)Actvity的 Module部分

@Module
public class MainActivityModule {

    @Provides
    public MainPresenter provideStudentPresenter(){

        Log.e("MainActivityModule","xtk provideStudentPresenter");
        return  new MainPresenter(new MainActivity());
    }

}

以上为个人学习部分

代码地址(需要1积分):
https://download.csdn.net/download/shiluohuashengmi/10487978

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值