1. 程式人生 > >android基礎--列表項新增進度框

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”/>