android - RecyclerView 适配器问题中的 ProgressDialog

标签 android progressdialog android-recyclerview

当我尝试在 recyclerview 适配器中使用 progressdialog 时出现异常消息:

Unable to add window -- token null is not for an application

我知道使用上下文的所有内容都可以,因为 Glide ProgressBar 下面的几行使用相同的上下文。知道有什么问题吗? 我的适配器类:

import android.app.ProgressDialog;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target;

import java.util.List;



public class ShopsAdapter extends RecyclerView.Adapter<ShopsAdapter.MyViewHolder> {

    Context mContext;
    List<String> shopsList;
    ProgressDialog progressDialog;

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public ImageView thumbnail;

        public MyViewHolder(View view) {
            super(view);
            thumbnail = (ImageView) view.findViewById(R.id.thumbnail);

        }
    }

    public ShopsAdapter(Context mContext, List<String> shopsList) {
        this.mContext = mContext;
        this.shopsList = shopsList;
    }


    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.shop_card,parent,false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        progressDialog = new ProgressDialog(mContext);

        shopsList.get(position);
        try{
            progressDialog.show();
            String stringformat = String.format(".../%s.png", shopsList.get(position));
            Glide.with(mContext).load(stringformat).listener(new RequestListener<String, GlideDrawable>() {
                @Override
                public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
                    return false;
                }

                @Override
                public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
                    //progressDialog.setVisibility(View.GONE);
                    return false;
                }
            }).centerCrop().fitCenter().into(holder.thumbnail);
        }catch (Exception e){
            Log.d("Dsdfs", e.getMessage());
            Glide.with(mContext).load("http://...Zabka.png").centerCrop().fitCenter().into(holder.thumbnail);
        }



    }

    @Override
    public int getItemCount() {
        return shopsList.size();
    }
}

最佳答案

改变

adapter = new ShopsAdapter(getApplicationContext(), shopsNames);

adapter = new ShopsAdapter(this, shopsNames);

关于android - RecyclerView 适配器问题中的 ProgressDialog,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44052675/

相关文章:

android - 你如何使用一个加载占位符,它是一个带有图像加载器(如 Glide、Picasso 等)的动画微调器?

java - android.os.NetworkOnMainThreadException 但我使用了 AsyncTask

android - 如何更改进度对话框的位置?

android - 在嵌套选项卡 Activity 中显示 ProgressDialog 时出现问题

java - 带有 ProgressDialog 的外部 AsyncTask 类 [更新 : and returning back?]

java - 构建 RecyclerView 时创建的自动生成文件出错

android - recyclerView android获取项目索引

android - RecyclerView.clear()?有没有一种方法可以单独清除()或使查看器数据无效?

android - 集成google plus android报错

Android Intent 打开应用程序不工作