【问题标题】:How to change Picasso to Glide in Recyclerview如何在 Recyclerview 中将 Picasso 更改为 Glide
【发布时间】:2020-06-25 23:23:24
【问题描述】:

我有一个使用 Textview 和 Imageview 的活动。我曾经用毕加索从 Firebase 数据库中检索图像。我正在使用 Recyclerview 和 Firebase 和后端。我想将图像视图更改为 Gifimage 视图。 Picasso 不支持 Gifimageview,所以我想将 Picasso 更改为 Glide。如何在此活动中应用 Glide。请帮我。对不起我的英语不好。
这是我的代码

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_language_sub);

    

    Toolbar toolbar = findViewById(R.id.LanguageSubToolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setTitle("Chapters");


    if (getSupportActionBar()!=null){

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }




    database = FirebaseDatabase.getInstance();
    MCC = database.getReference("LanguageJavaSub");


    recyclerView = (RecyclerView) findViewById(R.id.recycler_LanguageSub);
    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(new GridLayoutManager(this, 1));


    if (getIntent() != null)
        categoryId = getIntent().getStringExtra("CategoryId");
    if (!categoryId.isEmpty() && categoryId != null) {
        loadListThrillerSubModel(categoryId);
    }
}

private void loadListThrillerSubModel(String categoryId) {

    adapter = new FirebaseRecyclerAdapter<computerSubModel, computerViewHolder>(computerSubModel.class,

            R.layout.language_items,
            computerViewHolder.class,
            MCC.orderByChild("menuid").equalTo(categoryId)) {



        @Override
        protected void populateViewHolder(computerViewHolder viewHolder, final computerSubModel model, int position) {
            viewHolder.thrillername.setText(model.getTitle());

            Picasso.get().load(model.getImage())
                    .into(viewHolder.image1);


            final computerSubModel local = model;
            viewHolder.setItemClickListner(new ItemClickListner() {
                @Override
                public void onClick(View view, int position, boolean isLongClick) {


                    Intent detailsIntent = new Intent(LanguageSubActivity.this, LanguageVideoActivity.class);
                    detailsIntent.putExtra("CategoryId", adapter.getRef(position).getKey());
                    startActivity(detailsIntent);
                }
            });


        }
    };

    recyclerView.setAdapter(adapter);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    if (item.getItemId() == android.R.id.home)
        finish();
    return super.onOptionsItemSelected(item);
}

}

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    对于使用 Glide,

    第一个在 Gradle 文件中添加库

    implementation 'com.github.bumptech.glide:glide:4.9.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
    

    你可以在here link找到newset版本

    第二次更改您想要的代码。

    Glide.with(this)
        .load("image(GIF) url...")
        .into(imageView)
        .asGif();
    

    你的例子,

    改变这部分

     Picasso.get().load(model.getImage())
                        .into(viewHolder.image1);
    

    Glide.with(getContext())
        .load(model.getImage())
        .into(viewHolder.image1)
        .asGif();
    

    P.s] 更多选项请查看this docs

    【讨论】:

    • 谢谢兄弟。但是在我的代码中如何定义(getContext)方法
    • 例如,在 Activity 中,MainActivity.this 和在片段中,getActivity() 使用它
    【解决方案2】:

    使用这个 -->

    Glide.with(this).load(R.raw.sample_gif).into(imageView);
    

    Glide.with(this).asGif().load(R.raw.image_gif).into(imageView);
    

    是的,还添加依赖项:

    build.gradle 文件实现

    implementation 'com.github.bumptech.glide:glide:4.11.0'
    annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
    

    或:

    Glide.with(getContext()) //use getApplicationContext() or getContext()
    .load(model.getImage())
    .into(viewHolder.image1)
    .asGif();
    

    getApplicationContext() :返回整个应用程序的上下文(所有活动在其中运行的进程)。

    getApplicationContext() 或 getContext() 是android中的内置方法,无需在代码中定义整个实现

    【讨论】:

    • 还必须添加依赖到 build.gradle 文件实现 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0'
    • 没有。我得到了这个答案 - Glide.with(getContext()) - 但是在我的代码中如何定义 (getContext) 方法
    • prasin 看到我的编辑...如果您仍然没有得到答案,请告诉我
    • 我可以在没有 .asGif 的情况下以这种方法检索 jpeg 图像。 .asGif 显示错误。
    【解决方案3】:

    只需使用Glide 而不是Picasso,如下所示:

    Glide.with(context)
                    .load(imageUrl)
                    .into(imageView)
    

    Gradle 依赖如下:-

    dependencies {
      implementation "com.github.bumptech.glide:glide:4.9.0"
      annotationProcessor 'com.github.bumptech.glide:compiler:4.9.0'
    }
    

    在您的代码中,您可以使用 Glide 替换您的 Picasso 代码,如下所示:

    您的毕加索代码:

    Picasso.get().load(model.getImage())
                        .into(viewHolder.image1);
    

    使用 Glide 代码:

     Glide.with(viewHolder.getContext())
                        .load(model.getImage())
                        .into(viewHolder.image1)
    

    更多信息请查看documentation

    【讨论】:

    • 你可以得到viewHolder.getContext()
    • 更新了我的答案,请检查哪个解释了如何获取上下文
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-11
    • 2017-05-08
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多