ListView、GridView列表项中清加ProgressBar,这里用最简单的代码实现可以通用的功能
如果你的适配器getView方法返回的View是一个自定义控件的话,有点不好实现哦,不过可以用两个控件之间Visible 、Invisible来切换实现今天的效果
下面的例子是主类、适配器、异步下载类等的都写在一个类里面了,其它控件列表项中添加进度框大家也可以用如下的方法实现
一:效果图如下
核心代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 |
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; /** * 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 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
主布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <ListView android:id="@+id/listview" android:layout_width="fill_parent" android:layout_height="fill_parent" android:drawSelectorOnTop="false" android:choiceMode="none" android:focusable="false" android:scrollingCache="false" android:fadingEdge="none" android:focusableInTouchMode="false" android:clickable="false" android:dividerHeight="0.5dip" /> </RelativeLayout> ListView列表控件Item布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="110dp" android:background="#00ffeeaa" > <ImageView android:id="@+id/iv" android:layout_width="110dp" android:background="@drawable/ic_action_search" android:layout_height="110dp" android:contentDescription="@string/hello_world"/> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:text="@string/xiaomaguo"/> <ProgressBar android:id="@+id/progressBar1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:layout_alignTop="@+id/button" android:layout_marginLeft="29dp" /> <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBaseline="@+id/button" android:layout_alignBottom="@+id/button" android:layout_centerVertical="true" android:layout_toLeftOf="@+id/button" android:text="@string/cool" /> </RelativeLayout> |
所需权限:
<uses-permission android:name=”android.permission.INTERNET”/>