简体   繁体   English

从ViewHolder类传递Glide中的上下文?

[英]Passing context in Glide from a ViewHolder class?

I'm trying to pass context inside with() , but "this" doesn't work, neither do getContext() , getActivity() . 我试图在with()内部传递上下文,但是“ this”不起作用, getContext()getActivity()也不起作用。 My class is a ViewHolder which extends RecycleView . 我的课是ViewHolder,它扩展了RecycleView How do I get the context? 我如何获得上下文?

protected void bind(I item, @Nullable OnContactClickListener<I> listener) {
            Author author = item.getContact().getAuthor();
            Glide.with(this /* context */)
                    .using(new FirebaseImageLoader())
                    .load(storageRef.child("/"+author.getName()+"/pic.jpg"))
                    .error(new IdenticonDrawable(author.getId().getBytes()))
                    .into(avatar);
            String contactName = author.getName();
            name.setText(contactName);

so simple get context of avtar view. 如此简单地获取avtar视图的上下文。

protected void bind(I item, @Nullable OnContactClickListener<I> listener) {
            Author author = item.getContact().getAuthor();
            Glide.with(avatar.getContext())
                    .using(new FirebaseImageLoader())
                    .load(storageRef.child("/"+author.getName()+"/pic.jpg"))
                    .error(new IdenticonDrawable(author.getId().getBytes()))
                    .into(avatar);
            String contactName = author.getName();
            name.setText(contactName);

You can use 您可以使用

     Glide.with(itemview)
                        .using(new FirebaseImageLoader())
                        .load(storageRef.child("/"+author.getName()+"/pic.jpg"))
                        .error(new IdenticonDrawable(author.getId().getBytes()))
                        .into(avatar);

From this line 从这条线

name.setText(contactName);

I can say name is a TextView . 我可以说名称是TextView You can use view.getContext() to get Context from view. 您可以使用view.getContext()从视图获取Context view.getContext() returns the context the view is running in. view.getContext()返回运行视图的上下文。

Glide.with(name.getContext())

you can try like this : 你可以这样尝试:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
    private final Context context;

    public MyAdapter(Context context) {
        this.context = context;
    }

    @NonNull
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new ViewHolder(LayoutInflater.from(this.context).inflate(R.layout.frames_adapter_item, parent, false));
    }

    public void onBindViewHolder(@NonNull final ViewHolder holder, @SuppressLint("RecyclerView") int position) {


        holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {



            }
        });

        holder.progress_bar.setVisibility(View.GONE);

        Glide.with(getApplicationContext()).load(arrayOfFile.get(position)).asBitmap().into(new SimpleTarget<Bitmap>() {
                @Override
                public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
                    if (resource != null) {
                        imageView.setImageBitmap(resource);
                    }
                }

            });


    }

    public int getItemCount() {
        return 1;
    }

    class ViewHolder extends RecyclerView.ViewHolder {
        final ImageView imageView;
        final ProgressBar progress_bar;

        ViewHolder(View itemView) {
            super(itemView);
            this.imageView = itemView.findViewById(R.id.imageView);
            this.progress_bar = itemView.findViewById(R.id.progress_bar);
        }
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM