Java AppCompativeActivity未实现LifecycleOwner
我正在使用Android支持库26.1.0。这些是应用程序模块中的依赖项-Java AppCompativeActivity未实现LifecycleOwner,java,android,android-architecture-components,android-architecture-lifecycle,Java,Android,Android Architecture Components,Android Architecture Lifecycle,我正在使用Android支持库26.1.0。这些是应用程序模块中的依赖项- implementation "android.arch.lifecycle:runtime:1.0.0" implementation "android.arch.lifecycle:extensions:1.0.0-beta1" implementation "android.arch.persistence.room:rxjava2:1.0.0-beta1" implementation "android.arch
implementation "android.arch.lifecycle:runtime:1.0.0"
implementation "android.arch.lifecycle:extensions:1.0.0-beta1"
implementation "android.arch.persistence.room:rxjava2:1.0.0-beta1"
implementation "android.arch.lifecycle:common-java8:1.0.0-beta1"
annotationProcessor "android.arch.lifecycle:compiler:1.0.0-beta1"
但当我尝试使用ViewModel时,如下图所示-
mUserViewModel.getUsers().observe(this,
(Observer<Resource<List<UserView>>>) listResource -> {
if(listResource != null){
this.handleDataState(listResource.status, listResource.data, listResource.message);
}
});
这是ViewModel类
import android.arch.lifecycle.LiveData;
import android.arch.lifecycle.MutableLiveData;
import android.arch.lifecycle.ViewModel;
import com.github.amitkma.boilerplate.domain.interactor.GetUserList;
import com.github.amitkma.boilerplate.domain.model.User;
import com.github.amitkma.boilerplate.presentation.data.Resource;
import com.github.amitkma.boilerplate.presentation.data.ResourceState;
import com.github.amitkma.boilerplate.presentation.mapper.UserMapper;
import com.github.amitkma.boilerplate.presentation.vo.UserView;
import java.util.ArrayList;
import java.util.List;
import javax.inject.Inject;
import io.reactivex.subscribers.DisposableSubscriber;
public class UserViewModel extends ViewModel {
private final GetUserList mGetUserList;
private final UserMapper mUserMapper;
@Inject
public UserViewModel(GetUserList getUserList,
UserMapper userMapper) {
mGetUserList = getUserList;
mUserMapper = userMapper;
fetchUsers();
}
public void fetchUsers(){
mUserMutableLiveData.postValue(new Resource(ResourceState.LOADING, null, null));
mGetUserList.execute(new UserSubscriber(), null);
}
public LiveData<Resource<List<UserView>>> getUsers(){
return mUserMutableLiveData;
}
@Override
protected void onCleared() {
mGetUserList.dispose();
super.onCleared();
}
private final MutableLiveData<Resource<List<UserView>>> mUserMutableLiveData =
new MutableLiveData<>();
导入android.arch.lifecycle.LiveData;
导入android.arch.lifecycle.MutableLiveData;
导入android.arch.lifecycle.ViewModel;
导入com.github.amitkma.boilerplate.domain.interactior.GetUserList;
导入com.github.amitkma.boilerplate.domain.model.User;
导入com.github.amitkma.boilerplate.presentation.data.Resource;
导入com.github.amitkma.boilerplate.presentation.data.ResourceState;
导入com.github.amitkma.boilerplate.presentation.mapper.UserMapper;
导入com.github.amitkma.boilerplate.presentation.vo.UserView;
导入java.util.ArrayList;
导入java.util.List;
导入javax.inject.inject;
导入io.reactivex.subscribers.DisposableSubscriber;
公共类UserViewModel扩展了ViewModel{
私有最终GetUserList mGetUserList;
私有最终用户映射器mUserMapper;
@注入
公共用户视图模型(GetUserList GetUserList,
用户映射器(用户映射器){
mGetUserList=getUserList;
mUserMapper=userMapper;
fetchUsers();
}
公共用户(){
postValue(新资源(ResourceState.LOADING,null,null));
mGetUserList.execute(newusersubscriber(),null);
}
公共LiveData getUsers(){
返回mUserMutableLiveData;
}
@凌驾
已清除的受保护的void(){
mGetUserList.dispose();
super.onCleared();
}
私有最终可变LiveData mUserMutableLiveData=
新的MutableLiveData();
}您不再需要执行此操作 只需通过扩展LifecycleOwner的AppCompatActivity扩展您的活动 API级别1.0.0中不推荐使用此接口。使用 android.support.v7.app.AppCompatActivity扩展LifecycleOwner, 所以这个类没有用例 你忘了覆盖
private final LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this);
@Override
public LifecycleRegistry getLifecycle() {
return lifecycleRegistry;
}
您至少需要支持Lib
碎片也一样。只需通过扩展android.support.v4.app.Fragment的LifecycleFragment
来扩展您的片段即可
编辑:刚刚用Kotlin重建了一个快速示例项目,它成功了
class MainActivity : AppCompatActivity(), HasSupportFragmentInjector, AnkoLogger {
private val lifecycleRegistry by lazy { android.arch.lifecycle.LifecycleRegistry(this) }
private val viewModel by lazy { ViewModelProviders.of(this, viewModelFactory).get(BridgesVm::class.java) }
override fun getLifecycle() = lifecycleRegistry
public override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewModel.data.observe(this, Observer<Bridge?> { info { "Received" } })
}
}
class BridgesVm @Inject constructor() : ViewModel() {
val data: LiveData<Bridge> = MutableLiveData<Bridge>()
}
class MainActivity:AppCompatActivity(),HasSupportFragmentInjector,AnkoLogger{
lazy{android.arch.lifecycle.lifecycleRegistry(this)}提供的私有val lifecycleRegistry
由lazy{ViewModelProviders.of(这是viewModelFactory.get(BridgesVm::class.java)}生成的私有val viewModel
重写fun getLifecycle()=生命周期注册表
创建公共覆盖乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
viewModel.data.observe(这个,观察者{info{“Received”})
}
}
类BridgesVm@Inject构造函数():ViewModel(){
val data:LiveData=MutableLiveData()
}
编辑:
使用arch版本beta1时出现问题。考虑使用1.0.0 alpHA9-1直到这是固定的。在我的例子中,如果我使用beta1,它将不起作用,但是使用alpha 9-1,这里有相同的问题,所以我必须更新我的androidx.appcompat依赖项,如下所示:
implementation 'androidx.appcompat:appcompat:1.1.0-alpha04'
使用android jetpack,它会解决您的问题
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'
你需要发布更多的代码。显示活动的导入和类定义。我已经添加了代码。请看一看。除了在ViewModel中导入不需要的DisposableSubscriber之外,我没有看到任何问题。我没有粘贴内部Subscriber类,因为它与此问题无关。请尝试将arch版本设置为1.0.0-alpha9-1。我添加了活动和ViewModel类代码。请调查一下。确保覆盖getLifecycle()。我已经尝试过了。LifecycleRegistry mLifecycleRegistry=新的LifecycleRegistry(此);问题是一样的。这意味着LifecycleRegistry(LifecycleOwner)无法应用于packageName.BrowseActivity更新了我的代码并重建了一个非常快速的示例,它正在工作。请尝试使缓存无效,并仔细检查gradle文件
implementation 'androidx.appcompat:appcompat:1.1.0-rc01'