【发布时间】:2019-06-24 22:43:32
【问题描述】:
我有以下情况。我有一个包含片段的活动。在这个片段中,我显示了来自后端数据库的一些记录。我也在使用一个看起来像这样的适配器:
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,以便我可以在我的方法中使用它作为参数?
【问题讨论】:
-
你的
Activity实现了LifecycleOwner吗?另外,您如何将Context传递给适配器? -
如果 context 是
Fragment的实例,您可以将context用作((Fragment) context)。 -
@ADM 不,它没有。我将上下文传递给构造函数
public MovieAdapter(Context context) {this.context = context;}。你知道我该如何解决这个问题吗?还是谢谢! -
@JeelVankhede 我得到
Inconvertible types; cannot cast 'android.content.Context' to 'android.support.v4.app.Fragment'。 -
@ADM 作为一个片段,我正在使用这个
adapter = new MovieAdapter(getContext());这是正确的吗?
标签: java android android-room android-livedata