文档章节

Android列表控件选项中添加进度框ProgressBar实现

勤奋的桑尼
 勤奋的桑尼
发布于 2014/09/12 11:10
字数 961
阅读 19
收藏 0

今天有时间就学习了下在ListView、GridView列表项中清加ProgressBar,小马用最简单的代码实现可以通用的功能,人人都能看懂,哈哈,直接说下,如果你的适配器getView方法返回的View是一个自定义控件的话,有点不好实现哦,不过可以用两个控件之间Visible 、Invisible来切换实现今天的效果,下面的例子是主类、适配器、异步下载类等的都写在一个类里面了,为的是发的博文里一次性看的话方便,如果大家觉得结构不清楚的话根据自身需求自行抽取下,今天的DEMO只是个简单的思路,其它控件列表项中添加进度框大家也可以用如下的方法实现,老规矩,先看效果,再看代码:

 

(截图有点失真,但无防)

一:效果图如下

二:效果看完了,看下实现的路是怎样的,吼吼:核心代码如下:

package com.example.listviewitemprogress; 
 
import java.io.InputStream; 
import java.net.HttpURLConnection; 
import java.net.URL; 
 
import android.app.Activity; 
import android.content.Context; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.ListView; 
import android.widget.ProgressBar; 
import android.widget.TextView; 
 
/** 
 * @author 小马果 
 * ListView列表项中添加ProgressBar 
 */ 
public class MainActivity extends Activity { 
 
    private ListView mListView = null ;  
    private static final String imgUrl = "http://www.qq510.net/uploads/allimg/100613/2_100613171230_5.jpg"; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        init(); 
    } 
     
     
    private void init(){ 
        mListView =  (ListView)findViewById(R.id.listview); 
        mListView.setAdapter(new MyListViewAdapter(this)); 
    } 
     
    private class MyListViewAdapter extends BaseAdapter{ 
 
        private LayoutInflater inflater = null;  
         
        public MyListViewAdapter(Context con){ 
            inflater = (LayoutInflater)con.getSystemService(LAYOUT_INFLATER_SERVICE); 
        } 
        @Override 
        public int getCount() { 
            // TODO Auto-generated method stub 
            return Integer.MAX_VALUE; 
        } 
 
        @Override 
        public Object getItem(int arg0) { 
            // TODO Auto-generated method stub 
            return arg0; 
        } 
 
        @Override 
        public long getItemId(int position) { 
            // TODO Auto-generated method stub 
            return position; 
        } 
 
        @Override 
        public View getView(int position, View convertView, ViewGroup parent) { 
            // TODO Auto-generated method stub 
            ViewHolder mHolder = new ViewHolder() ; 
            if(convertView == null){ 
                convertView = inflater.inflate(R.layout.list_item, null); 
                mHolder.iv = (ImageView)(convertView.findViewById(R.id.iv)); 
                mHolder.mBtn = (Button)(convertView.findViewById(R.id.button)); 
                mHolder.pb = (ProgressBar)(convertView.findViewById(R.id.progressBar1)); 
                mHolder.tv = (TextView)(convertView.findViewById(R.id.textView1)); 
                convertView.setTag(mHolder); 
            }else{ 
                mHolder = (ViewHolder)convertView.getTag(); 
            } 
             
            new AsyncTask<ViewHolder, Void, Bitmap>() { 
                private ViewHolder v; 
 
                @Override 
                protected Bitmap doInBackground(ViewHolder... params) { 
                    v = params[0]; 
                    return  BitmapFactory.decodeStream(getStreamFromURL(imgUrl)); 
                } 
 
                @Override 
                protected void onPostExecute(Bitmap result) { 
                    super.onPostExecute(result); 
                        v.pb.setVisibility(View.GONE); 
                        v.mBtn.setVisibility(View.VISIBLE); 
                        v.iv.setImageBitmap(result); 
                } 
            }.execute(mHolder); 
            return convertView; 
        } 
         
    } 
     
    static class ViewHolder{ 
        ImageView iv = null ;  
        Button mBtn = null ; 
        ProgressBar pb = null ;  
        TextView tv = null ;  
    } 
     
     
    static String length; 
    public static InputStream getStreamFromURL(String imageURL) { 
        InputStream in=null; 
        try { 
            URL url=new URL(imageURL); 
            HttpURLConnection connection=(HttpURLConnection) url.openConnection(); 
//          connection.setRequestProperty("Connection", "Keep-Alive");//维持长连接 
            connection.setConnectTimeout(6* 1000);//设置连接超时 
            if (connection.getResponseCode() != 200) throw new RuntimeException("请求失败"); 
             length = connection.getHeaderField("Content-Length"); 
            in=connection.getInputStream(); 
             
        } catch (Exception e) { 
            // TODO Auto-generated catch block 
            e.printStackTrace(); 
        } 
        return in; 
         
    } 
     
     
}

 


三:再来看下两个布局吧(为方便查,小马就放一起了:)


 

 最后,由于选项中使用的图片是小马从网上异步下载加载的,所以得开下联网权限,大家别忘了加就行了,如下:

  1. 主布局文件: 

  2.  

  3. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 

  4.     xmlns:tools="http://schemas.android.com/tools" 

  5.     android:layout_width="match_parent" 

  6.     android:layout_height="match_parent" > 

  7.  

  8.     <ListView 

  9.         android:id="@+id/listview" 

  10.         android:layout_width="fill_parent" 

  11.         android:layout_height="fill_parent" 

  12.         android:drawSelectorOnTop="false"  

  13.         android:choiceMode="none" 

  14.         android:focusable="false"  

  15.         android:scrollingCache="false" 

  16.         android:fadingEdge="none"  

  17.         android:focusableInTouchMode="false" 

  18.         android:clickable="false"  

  19.         android:dividerHeight="0.5dip" /> 

  20.      

  21. </RelativeLayout> 

  22.  

  23. ListView列表控件Item布局: 

  24.  

  25. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 

  26.     xmlns:tools="http://schemas.android.com/tools" 

  27.     android:layout_width="match_parent" 

  28.     android:layout_height="110dp"  

  29.     android:background="#00ffeeaa" 

  30.     > 

  31.  

  32.     <ImageView  

  33.         android:id="@+id/iv" 

  34.         android:layout_width="110dp" 

  35.         android:background="@drawable/ic_action_search" 

  36.         android:layout_height="110dp"  

  37.         android:contentDescription="@string/hello_world"/> 

  38.      

  39.     <Button 

  40.         android:id="@+id/button" 

  41.         android:layout_width="wrap_content" 

  42.         android:layout_height="wrap_content" 

  43.         android:layout_alignParentRight="true" 

  44.         android:layout_centerVertical="true" 

  45.         android:text="@string/xiaomaguo"/> 

  46.  

  47.     <ProgressBar 

  48.         android:id="@+id/progressBar1" 

  49.         android:layout_width="wrap_content" 

  50.         android:layout_height="wrap_content" 

  51.         android:layout_alignParentLeft="true" 

  52.         android:layout_centerVertical="true" 

  53.         android:layout_alignTop="@+id/button" 

  54.         android:layout_marginLeft="29dp" /> 

  55.  

  56.     <TextView 

  57.         android:id="@+id/textView1" 

  58.         android:layout_width="wrap_content" 

  59.         android:layout_height="wrap_content" 

  60.         android:layout_alignBaseline="@+id/button" 

  61.         android:layout_alignBottom="@+id/button" 

  62.         android:layout_centerVertical="true" 

  63.         android:layout_toLeftOf="@+id/button" 

  64.         android:text="@string/cool" /> 

  65.      

  66. </RelativeLayout> 


     <uses-permission      android:name="android.permission.INTERNET"/>

 

     怎么样?简单吧,刚开始的时间没思路,后来玩花辨的时候想到了,美丽说瀑布流实现的原理跟这个差不多,上面这个只是个小的DEMO,给大家提供个思路,GridView等其它控件,大家可以直接参照上面这个代码来写,吼吼,小DEMO源码已经加在附件中,觉得有用就下下来瞅瞅吧,加油,每天进步一点点,祝 :Happy ! O_O


本文转载自:http://mzh3344258.blog.51cto.com/1823534/995321

勤奋的桑尼
粉丝 1
博文 32
码字总数 32516
作品 0
徐汇
程序员
私信 提问
Android列表控件选项中添加进度框ProgressBar实现

今天有时间就学习了下在ListView、GridView列表项中清加ProgressBar,小马用最简单的代码实现可以通用的功能,人人都能看懂,哈哈,直接说下,如果你的适配器getView方法返回的View是一个自定...

冯京宝
2012/09/20
0
0
Android零基础入门第82节:Activity数据回传

上一节学习了将简单的数据从MainActivity传递到SecondActivity,本节一起来学习数据如何从SecondActivity回传到MainActivity。 一、简介 前面己经提到,Activity 还提供了一个 startActivit...

鑫鱻
2017/10/24
0
0
Android零基础入门第85节:Fragment使用起来非常简单

Fragment创建完成后并不能单独使用,还需要将Fragment加载到Activity中,在Activity中添加Fragment的方式有两种:静态加载和动态加载,接下来分别进行学习。 一、静态加载 静态加载Fragment非...

鑫鱻
2017/10/27
0
0
Android 基本控件的常用属性

TextView //normal 默认 bold 粗体 italic斜体 可用| 多选android:textStyle //设置限定可以输入哪些字符android:digits //设置文本可点击,类型有none、web、email、phone、map、allandroi...

xi阳
2018/08/20
0
0
Android有用代码片段(三)

前两个已经到第四十个了,所以还得再开一篇,用于记录,以前文章:Android有用代码片段(二)、android有用代码片段,有需要的朋友可以去看一下。 四十一、数据库写入图片信息: [java]view...

curitis
2012/05/18
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Linux输入法fcitx的安装问题

Fcitx 总共要安装的包如下 fcitxfcitx-binfcitx-config-commonfcitx-config-gtk | fcitx-config-gtk2fcitx-datafcitx-frontend-allfcitx-frontend-gtk2fcitx-frontend-gtk3......

CHONGCHEN
57分钟前
4
0
网络基础

前言: 最近整理一些以前的学习笔记(有部分缺失,会有些乱,日后再补)。 过去都是存储在本地,此次传到网络留待备用。 计算机网络的功能: 1.数据通信; 2.资源共享; 3.增加数据可靠性; 4....

迷失De挣扎
57分钟前
7
0
spring boot升级到spring cloud

1、先升级spring boot 版本到2.1.3 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.1.3.RELEAS......

moon888
今天
12
0
从蓝鲸视角谈DevOps

DevOps源于Development和Operations的组合 常见的定义 DevOps是一种重视“软件开发人员(Dev)”和“IT运维技术人员(Ops)”之间沟通合作的文化、运动或惯例。透过自动化“软件交付”和“架构变...

嘉为科技
今天
1
0
微服务设计 笔记

微服务设计 一、微服务架构理论 1.六边形架构 1)六边形架构(Hexagonal Architecture),又称为端口和适配器架构风格;使用适配器与外界进行交互,外界通过应用层API与内部进行交互。 2)经典...

啃不动地大坚果
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部