【问题标题】:Display a Progress bar in a custom adapter while downloading with volley使用 volley 下载时在自定义适配器中显示进度条
【发布时间】:2014-08-18 19:08:01
【问题描述】:

我想在下载时在我的自定义适配器中显示一个进度条!

有我的适配器类

public class ImageAdapter extends BaseAdapter {

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        final ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = ((Activity) context).getLayoutInflater().inflate(layoutResourceId, parent, false);
            holder.pictureView = (GalerieImageView) convertView.findViewById(R.id.GalerieView);
            holder.progressBar = (ProgressBar) convertView.findViewById(R.id.progressBarGalerie);
            holder.progressBar.setVisibility(View.VISIBLE);
            holder.progressBar.setIndeterminate(true);
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }


        ImageLoader imageLoader = ImageCacheManager.getInstance().getImageLoader();
        if (arrayList.get(position).getTurl() != null) {
            Log.i("lien", "" + arrayList.get(position).getTurl());
            holder.pictureView.setImageUrl(arrayList.get(position).getTurl(), imageLoader);
            holder.pictureView.setVisibility(View.VISIBLE);

            holder.pictureView.setDefaultImageResId(R.drawable.ico_loading);
            holder.pictureView.setErrorImageResId(R.drawable.ico_error);
            holder.pictureView.setLayoutParams(new RelativeLayout.LayoutParams(imageWidth, imageWidth));
            holder.pictureView
                    .setResponseObserver(new GalerieImageView.ResponseObserver() {
                        @Override
                        public void onError() {
                            holder.progressBar.setVisibility(View.GONE);
                        }

                        @Override
                        public void onSuccess() {
                            holder.progressBar.setVisibility(View.GONE);

                        }
                    });
        } else {
            //holder.pictureView.setVisibility(View.GONE);
        }
        return convertView;
    }
}

My Custom Networkview with Observer (GaleryImageView) 它基于this StackOverFlow answer。我无法显示进度条。

【问题讨论】:

  • 请不要使用ticks 来格式化每一行。只打算使用 4 个空格的代码,它的格式正确。
  • 您的代码似乎是正确的。您的布局似乎有误,您要发布吗?

标签: android android-progressbar android-volley custom-adapter


【解决方案1】:

我正是这样做的。我将进度条包装在调用 Activity/Fragment 的方法中,而不是适配器本身。比如:

public void startProgressBar() {
    dialog = new ProgressDialog(this);
    dialog.setIndeterminate(true);
    dialog.setCancelable(false);
    dialog.setMessage("MEssgae");
    dialog.show();
}

Dialog 是类成员。

现在当我调用 volley 时,我的下一个调用是 startProgressBar - 我取消对话框 onReponse 和 onError。

原来如此

doVolleyCommand(URL);
startProgressBar();

在我的响应处理程序中:

if (dialog != null && dialog.isShowing()) { 
    dialog.dismiss();
}

【讨论】:

  • 对不起,我是说法语的,所以我想了解更多。 Dialog是一个班级成员是什么意思,我应该为ProgressBar创建一个班级吗?
  • 所以在我的活动中,我声明了私有 Dialog 对话框;这样我就可以在响应/​​错误响应中轻松引用它,而无需最终的等。在适配器本身中执行此操作,我怀疑您将进度条附加到错误的视图。您真的想在包含的活动/片段中执行此操作。我无法从您的代码中分辨出哪个。
  • 事实上我有一个 Gridview,我想在下载时在每个视图中显示进度条。我已经小心(我希望)通过验证我没有将 PB 附加到错误的视图
  • 我不是专家,但是当我尝试在我的自定义适配器上执行此操作时,它不起作用,我尝试了几次。我没有尝试的一件事是使用存储在应用程序类中的共享上下文——许多人认为这是一个禁忌。我不想通过单例与应用程序等,但如果您决心在适配器中这样做,我会尝试这样做。我不确定应用程序工作流程的其余部分,但假设这是由 UI 或父活动/片段(也不是 gridview)触发的,我会在该层执行。
  • tkanks 很多,为了你的帮助,我会在等待你的更新的同时尝试你建议我的方法:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多