android基礎--列表項新增進度框
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”/>