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

猜你喜欢

转载自blog.csdn.net/lalate/article/details/83900870