Android ListView 中更新 ProgressBar 进度完整demo
来源:互联网 发布:七星彩庄家辅助软件 编辑:程序博客网 时间:2024/05/29 08:17
网上搜了一下ListView的Item中嵌套ProgressBar,很多都不对,有些滑动进度会错乱,导包没复制,自己导下包,简单起见,所有类都写在ProgressActivity 中了,有什么不对的请联系。activity_progress 布局<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/list" android:layout_width="match_parent" android:layout_height="wrap_content" android:cacheColorHint="@android:color/transparent" android:divider="@android:color/darker_gray" android:dividerHeight="1dp" android:listSelector="@android:color/transparent" /></LinearLayout>progress_item 布局
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingTop="10dp" android:paddingBottom="10dp" android:minHeight="?android:attr/listPreferredItemHeight" android:orientation="vertical" > <TextView android:id="@+id/item_name" android:layout_width="match_parent" android:layout_height="wrap_content" /> <ProgressBar android:id="@+id/item_progress" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="invisible" /> <TextView android:id="@+id/item_progress_desc" android:layout_width="match_parent" android:layout_height="wrap_content" /></LinearLayout>
public class ProgressActivity extends Activity { private List<Data> mTasks = new ArrayList<>(); private ListView mListView; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_progress); for (int i = 0; i < 50; i++) { mTasks.add(new Data()); } mListView = (ListView) findViewById(R.id.list); mListView.setAdapter(new MyAdapter()); mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { download(position); } }); } private void download(final int positionInAdapter) { mTasks.get(positionInAdapter).setDownload(true); if (positionInAdapter >= mListView.getFirstVisiblePosition() && positionInAdapter <= mListView.getLastVisiblePosition()) { int positionInListView = positionInAdapter - mListView.getFirstVisiblePosition(); ProgressBar item = (ProgressBar) mListView.getChildAt(positionInListView) .findViewById(R.id.item_progress); item.setVisibility(View.VISIBLE); } new Thread(new Runnable() { @Override public void run() { for (int i = 1; i < 101; i++) { final int progress = i; runOnUiThread(new Runnable() { @Override public void run() { publishProgress(positionInAdapter, progress); } }); SystemClock.sleep(500); } } }).start(); } public void publishProgress(final int positionInAdapter, final int progress) { mTasks.get(positionInAdapter).setProgress(progress); if (positionInAdapter >= mListView.getFirstVisiblePosition() && positionInAdapter <= mListView.getLastVisiblePosition()) { int positionInListView = positionInAdapter - mListView.getFirstVisiblePosition(); ProgressBar item = (ProgressBar) mListView.getChildAt(positionInListView) .findViewById(R.id.item_progress); item.setProgress(progress); } } class MyAdapter extends BaseAdapter { @Override public int getCount() { return mTasks.size(); } @Override public Object getItem(int position) { return mTasks.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { viewHolder = new ViewHolder(); convertView = View.inflate(ProgressActivity.this, R.layout.progress_item, null); viewHolder.textView = (TextView) convertView.findViewById(R.id.item_name); viewHolder.progressBar = (ProgressBar) convertView.findViewById(R.id.item_progress); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.textView.setText(mTasks.get(position).getName()); if (mTasks.get(position).isDownload()) { viewHolder.progressBar.setVisibility(View.VISIBLE); viewHolder.progressBar.setProgress(mTasks.get(position).getProgress()); } else { viewHolder.progressBar.setVisibility(View.INVISIBLE); } return convertView; } class ViewHolder { TextView textView; ProgressBar progressBar; } } class Data { private String name; private boolean isDownload; private int progress; public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isDownload() { return isDownload; } public void setDownload(boolean download) { isDownload = download; } public int getProgress() { return progress; } public void setProgress(int progress) { this.progress = progress; } }}
阅读全文
0 0
- Android ListView 中更新 ProgressBar 进度完整demo
- Android 如何在 ListView 中更新 ProgressBar 进度
- progressbar定时更新进度
- ProgressBar 为什么可以在非UI线程中更新进度。
- 结合动态更新ProgressBar进度
- android listview嵌套progreesbar更新进度 ftp
- Android列表控件选项中添加进度框ProgressBar实现
- android中实现PopupWindow跟随ProgressBar进度显示
- android progressBar 自定义 进度颜色
- android--进度框(ProgressBar)
- Android listview动态添加删除更新带ProgressBar的Item
- ListView嵌套ProgressBar更新方式
- 文章标题android之listview异步加载图片时显示加载进度ProgressBar
- Android 更新ProgressBar
- Android中动态更新ListView
- Android中动态更新ListView
- Android中动态更新ListView
- Android中动态更新ListView
- TagHelper是怎么实现的
- 大数据项目实践:基于hadoop+spark+mongodb+mysql开发医院临床知识库系统
- 用css实现的固定定位
- 登录工程:传统 Web 应用中的身份验证技术
- JWT【JSON Web Token】 简述
- Android ListView 中更新 ProgressBar 进度完整demo
- Pylearn2之YAML
- Docker for Windows使用简介
- 深度探索c++对象模型(4)
- JWT【JSON Web Token】 简述
- 微软开源PowerShell并支持Linux
- 在.Net项目中使用Redis作为缓存服务
- 在docker中运行ASP.NET Core Web API应用程序
- .NET Core中的认证管理解析