本文介紹了如何將碎片的上下文轉換為LifecycleOwner?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
我有以下方案。我有一個活動,里面有一個片段。在這段代碼中,我顯示了來自后端數據庫的一些記錄。我還使用了如下所示的適配器:
public class MovieAdapter extends PagedListAdapter<Movie, MovieAdapter.MovieViewHolder> {
private Context context;
public MovieAdapter(Context context) {this.context = context;}
@NonNull
@Override
public MovieViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
//Create the view
}
@Override
public void onBindViewHolder(@NonNull final MovieViewHolder holder, int position) {
Movie movie = getItem(position);
String title = movie.title;
holder.titleTextView.setText(title);
MovieRepository movieRepository = new MovieRepository(context);
LiveData<Movie> liveData = movieRepository.retrieveFavoriteMovie(movie.id);
liveData.observe(context, m -> { //Error
if(m != null) {
boolean favorite = m.favorite;
if(favorite) {
//Do something
} else {
//Do something else
}
}
});
}
class MovieViewHolder extends RecyclerView.ViewHolder {
ImageView favoriteImageView;
TextView titleTextView;
MovieViewHolder(View itemView) {
super(itemView);
titleTextView = itemView.findViewById(R.id.title_text_view); favoriteImageView = itemView.findViewById(R.id.favorite_image_view);
}
}
}
在onBindViewHolder
中,我嘗試檢查ROMM數據庫中是否存在特定電影,但收到以下錯誤:
Wrong 1st argument type. Found: 'android.content.Context', required: 'android.arch.lifecycle.LifecycleOwner'
那么如何將片段的上下文轉換為LifecycleOwner
,以便我可以像在我的方法的參數中一樣使用它呢?
推薦答案
android.content.Context
不實現android.arch.lifecycle.LifecycleOwner
。
您必須傳遞AppCompatActivity
的實例,該實例實現android.arch.lifecycle.LifecycleOwner
(或執行該操作的任何其他類)。
或CAST(AppCompatActivity) context
,當context
為instanceof
AppCompatActivity
時。要可靠地從上下文獲取活動,請選中https://stackoverflow.com/a/46205896/2413303
這篇關于如何將碎片的上下文轉換為LifecycleOwner?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,