像在 WhatsApp 中一样加载多个图像进度条
Posted
技术标签:
【中文标题】像在 WhatsApp 中一样加载多个图像进度条【英文标题】:Multiple Images Progress Bar loading Like in Whats App 【发布时间】:2015-08-17 11:52:27 【问题描述】:我想在上传或下载图像或视频时在 Whats App 中显示多个进度条。以及完成的进度条隐藏进度条。
我尝试使用异步任务执行此操作,但没有获得确切的解决方案,并且代表也习惯这样做。没有得到确切的解决方案。
这是我的代码
主要活动
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);
这是进展
让我知道有价值的解决方案,或者是否有任何图书馆对其有益
【问题讨论】:
这是有效的,但这会为每个视图多次调用异步任务。例如,如果列表有 4 个元素,它将为第 4 个元素调用 4 次。 【参考方案1】:我不太确定您所说的“精确解决方案”是什么意思,但查看您的代码我发现您正在尝试从 AsyncTask 设置进度。但是,您只能从 UI 线程更新视图,而不能直接从 AsyncTask 中更新,这是一个单独的线程。
但是,Asynctask 提供了一种方法 publishProcess(),您可以使用该方法在 UI 线程上执行此类操作(例如调用更新进度条的函数),而您的 doInBackground 正在单独的线程中工作。检查this example.
您可能需要一个接口来从 AsyncTask 调用主线程中的函数。希望这会有所帮助!
【讨论】:
使用 ASYNCTASK 更新视图会产生这个问题。尝试在主 UI 线程中更新它们。以上是关于像在 WhatsApp 中一样加载多个图像进度条的主要内容,如果未能解决你的问题,请参考以下文章
如何像在 whatsapp 中一样在 CollapsingToolbarLayout 中实现字幕
TextField 没有被键盘顺利推上,就像在 Whatsapp 和环聊中一样