簡體   English   中英

ViewModel Observer的第一個參數是require Lifecycleowner

[英]ViewModel Observer first argument is require Lifecycleowner

我正在嘗試使用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) {

        }
    });
}

}

設置從DOA界面獲取記錄的返回類型為
LiveData<List<LocatStat>> getAllStats();

然后分段獲取實時數據,

LiveData<List<LocalStat> localStats;

最后在片段中設置Livedata觀察器

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

        // Update UI

    }
});

因此,經過幾天的嘗試,我發現了問題。 您必須在每一個片段或活動中都包含這幾行,我認為是由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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM