android - 多个图像进度条加载就像在 Whats App 中一样

标签 android listview android-asynctask progress-bar android-arrayadapter

我想在上传或下载图片或视频时像 Whats App 一样显示多个进度条。并且完成的进度会隐藏进度条。

我尝试使用 Async Task 来做到这一点,但没有得到确切的解决方案,而且也曾被代表使用过。没有得到精确解。

这是我的代码

主要 Activity

public class MainActivity extends ActionBarActivity {

    private ListView mListView;
    private ArrayList<String> alst;
    private int count = 0;
    private MyAdapter adapter;

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

        mListView = (ListView) findViewById(R.id.listView1);
        alst = new ArrayList<String>();

        adapter = new MyAdapter(this, R.layout.activity_main, alst);

        mListView.setAdapter(adapter);
    }

    public void onClick(View v) {
        count++;
        alst.add("" + count);
        adapter.notifyDataSetChanged();
    }
}

这是我的适配器

public class MyAdapter extends ArrayAdapter<String> {

    private Context mContext;
    public ViewHolder viewHolder;

    public MyAdapter(Context context, int resource, List<String> objects) {
        super(context, resource, objects);
        mContext = context;
    }

    private class ViewHolder {
        ProgressBar progressBar;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        viewHolder = null;
        if (convertView == null) {

            LayoutInflater inflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            convertView = inflater.inflate(R.layout.adapter, parent, false);

            viewHolder = new ViewHolder();
            viewHolder.progressBar = (ProgressBar) convertView
                    .findViewById(R.id.progressBar1);

            viewHolder.progressBar.getIndeterminateDrawable().setColorFilter(
                    mContext.getResources().getColor(R.color.actionBar),
                    android.graphics.PorterDuff.Mode.MULTIPLY);

            viewHolder.progressBar.setVisibility(View.VISIBLE);

            convertView.setTag(viewHolder);
        }

        viewHolder = (ViewHolder) convertView.getTag();

        TextView textView = (TextView) convertView.findViewById(R.id.textView1);

        textView.setText(getItem(position));
        new DownloadAsyncTask().execute(viewHolder);
        return convertView;
    }

    public class DownloadAsyncTask extends
            AsyncTask<ViewHolder, Void, ViewHolder> {

        @Override
        protected ViewHolder doInBackground(ViewHolder... params) {
            ViewHolder viewHolder = params[0];

            for (int i = 0; i < 2500; i++) {
                System.out.println(i);
            }
            return viewHolder;
        }

        @Override
        protected void onPostExecute(ViewHolder result) {
            result.progressBar.setVisibility(View.GONE);
        }
    }
}

这是进度

enter image description here

让我知道有值(value)的解决方案或者是否有任何图书馆对此有益

最佳答案

我不太确定您所说的“精确解”是什么意思,但是查看您的代码我发现您正在尝试从 AsyncTask 设置进度。但是,您只能从 UI 线程更新 View ,而不能直接从 AsyncTask 中更新 View ,AsyncTask 是一个单独的线程。

但是,Asynctask 提供了一种方法 publishProcess(),您可以使用它在 UI 线程上执行此类操作(例如调用更新进度条的函数),而您的 doInBackground 在单独的线程中工作。检查this example.

您可能需要一个接口(interface)来从 AsyncTask 调用主线程中的函数。希望这对您有所帮助!

关于android - 多个图像进度条加载就像在 Whats App 中一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30617243/

相关文章:

java - ProgressDialog 新 Activity Asynctask 未显示,为什么?

android - android studio中不存在firebase消息传递组件

java - 如何在 Android 上暂停/延迟?

android - 更改/隐藏工具栏菜单图像

android - 加载TextureAtlas后,有一段时间帧率较低

Android - 如何创建从右到左的水平ListView?

java - ListView 向上滚动时图像重叠?

java - 如何在 JavaFX 中绑定(bind) TextField 和 String 对象?

java - onProgressUpdate 未运行

java - Android 中的 VideoView 无法正确播放视频