相关疑难解决方法(0)

Dagger2中@Binds与@Provides批注的用例是什么

我不确定Dagger2的@Bind注释的用途。

根据我在网上阅读的内容,即时通讯仍然不清楚,但这是一个示例:

@Module
public abstract class HomeModule {

  @Binds
  public abstract HomePresenter bindHomePresenter(HomePresenterImp   
    homePresenterImp);
}
Run Code Online (Sandbox Code Playgroud)

并且类定义如下所示:

public interface HomePresenter {
    Observable<List<User>> loadUsers();
}

public class HomePresenterImp implements HomePresenter {

    public HomePresenterImp(){
    }  

    @Override
    public Observable<List<User>> loadUsers(){
        //Return user list observable
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我只能使用提供注释,为什么还要使用@Binds,如下所示:

@Provides
public HomePresenter provideHomePresenter() {
    return new HomePresenterImp();
}
Run Code Online (Sandbox Code Playgroud)

@Binds而不是@Provides的用例是什么?如果我使用@Binds,我是否仍需要在我的appcomponent中声明它(当我使用@Binds时,它是一个抽象类)?

android dagger-2

9
推荐指数
3
解决办法
3041
查看次数

ViewModelProviders 在我的 Fragment 中不起作用

这就是我正在尝试做的。

  • ArrayList在 Fragment 内设置对象
  • 从FragmentActivity 容器内的观察者获取该数组(承载所有片段的活动)

所以,我所做的是以下。

首先,我SharedViewModel从我将设置的位置创建并从中获取数据:

共享视图模型.kt

class SharedViewModel: ViewModel() {

    var personArrayObj:MutableLiveData<ArrayList<Person>> = MutableLiveData()

    fun setPersonArray(personArray:ArrayList<Person>){
        personArrayObj.value = personArray
    }

    val getPersonArray:LiveData<ArrayList<Person>>
    get() = personArrayObj

}
Run Code Online (Sandbox Code Playgroud)

现在,我ViewModel在MainActivity承载所有片段创建的内部实例化它,因此,我可以ArrayData从任何 Fragment 集合中获取它:

主活动.kt

class MainActivity: FragmentActivity(){

private lateinit var viewModel:SharedViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        viewModel = ViewModelProviders.of(this).get(SharedViewModel::class.java)
        viewModel.getPersonArray.observe(this, Observer { it:ArrayList<Person>
            Log.d("Array:",""+it)
        })
    }

}
Run Code Online (Sandbox Code Playgroud)

然后我需要做的最后一件事是从我想要的任何 Fragment 设置该 Array 的值,然后如果该值发生更改,将触发主机 Activity,因此,要做到这一点,我只需viewModel.setValue(personArray)在我想要的Fragment 上做一个.

问题 …

android mvvm fragment kotlin android-viewmodel

8
推荐指数
1
解决办法
1万
查看次数

标签 统计

android ×2

android-viewmodel ×1

dagger-2 ×1

fragment ×1

kotlin ×1

mvvm ×1