首页 > 解决方案 > 如何将片段的上下文转换为 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'

那么如何将片段的上下文转换为 aLifecycleOwner以便我可以在我的方法中将其用作参数?

标签: javaandroidandroid-roomandroid-livedata

解决方案


android.content.Context不执行android.arch.lifecycle.LifecycleOwner

您必须传递 的实例AppCompatActivity,该实例实现android.arch.lifecycle.LifecycleOwner(或任何其他执行此操作的类)。

或 cast (AppCompatActivity) context,什么时候contextinstanceof AppCompatActivity. 要以可靠的方式从上下文中获取活动,请检查https://stackoverflow.com/a/46205896/2413303


推荐阅读