【问题标题】:ViewModel Observer first argument is require LifecycleownerViewModel Observer 第一个参数是需要 Lifecycleowner
【发布时间】:2017-11-19 21:58:58
【问题描述】:

我正在尝试使用 android ViewModel 和 LiveData,但是当我想创建观察时出现错误。第一个参数给我一个错误:错误的第一个参数类型,它是期望 Lifecycleowner。如果我尝试构建它:不兼容的类型:FragStat 无法转换为 LifecycleOwner 我正在使用构建工具 27.0.1 和相同的支持库。

这是我的片段:

import android.arch.lifecycle.Observer;
import android.arch.lifecycle.ViewModelProviders;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;

import android.support.v7.widget.RecyclerView;
import android.util.Log;

import com.example.konem.pubgstat.Adapters.StatAdapter;
import com.example.konem.pubgstat.LocalStatViewModel;
import com.example.konem.pubgstat.Models.LocalStat;
import com.example.konem.pubgstat.R;
import com.example.konem.pubgstat.Utils.LocalData.AppDatabase;
import com.example.konem.pubgstat.Utils.UserManager;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.EFragment;
import org.androidannotations.annotations.ViewById;
import java.util.List;
import static android.content.ContentValues.TAG;

@EFragment(R.layout.fragment_frag_stat)
public class FragStat extends Fragment {
private List<LocalStat> localStats;
private StatAdapter statAdapter;
private AppDatabase appDatabase;
private UserManager userManager;


@ViewById
RecyclerView rvStats;

@AfterViews
void init() {
    appDatabase = AppDatabase.getAppDatabase(getActivity());
    userManager = new UserManager(getActivity());
    LocalStatViewModel mViewModel = 
    ViewModelProviders.of(this).get(LocalStatViewModel.class);


    statAdapter = new StatAdapter(localStats);

    rvStats.setLayoutManager(new LinearLayoutManager(getActivity()));
    rvStats.setAdapter(statAdapter);
    subscribetostats(mViewModel);
}

private void subscribetostats(LocalStatViewModel localStatViewModel) {
    localStatViewModel.getList().observe(this, new Observer<List<LocalStat>>() {
        @Override
        public void onChanged(@Nullable List<LocalStat> localStats) {

        }
    });
}

}

【问题讨论】:

    标签: android observable viewmodel


    【解决方案1】:

    设置从DOA接口获取记录的返回类型为
    LiveData&lt;List&lt;LocatStat&gt;&gt; getAllStats();

    然后在fragment中获取Live数据,

    LiveData<List<LocalStat> localStats;
    

    最终在片段中设置 Livedata 观察者

    localStats.getList().observe(this, new Observer<List<LocalStat>>() {
        @Override
        public void onChanged(@Nullable List<LocalStat> localStats) {
    
            // Update UI
    
        }
    });
    

    【讨论】:

    • 不幸的是,这给了我同样的错误,localStats.getList().observe(this, new Observer>() 在这一行中这是错误的论点。
    【解决方案2】:

    所以经过几天的尝试,我发现了问题。你必须在每个片段或活动中包含这几行,我认为是由 appcombat 实现的,但不是......

    private LifecycleRegistry mLifecycleRegistry;
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    
        mLifecycleRegistry = new LifecycleRegistry(this);
        mLifecycleRegistry.markState(Lifecycle.State.CREATED);
    
    }
    
    @Override
    public void onStart() {
        super.onStart();
        mLifecycleRegistry.markState(Lifecycle.State.STARTED);
    }
    
    @NonNull
    @Override
    public Lifecycle getLifecycle() {
        return mLifecycleRegistry;
    }
    

    【讨论】:

      猜你喜欢
      • 2020-04-16
      • 1970-01-01
      • 1970-01-01
      • 2019-06-27
      • 2015-12-16
      • 1970-01-01
      • 2020-08-13
      • 2023-03-14
      • 2018-01-08
      相关资源
      最近更新 更多