继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

ListView之适配器的使用

浮云间
关注TA
已关注
手记 146
粉丝 16
获赞 47

ListView之适配器的使用,包含了ArrayAdapter,SimpleAdapter ,BaseAdapter等适配器。

1:ArrayAdapter

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

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

/****

 *

 *

 * ArrayAdapter

 * @author Administrator

 *

 */ 

public class ArrayAdapterActivity   extends Activity   { 

    

   private ListView mListView; 

    //定义一个String数组,数组里的数据就是ListView里的一项 

   String[] arrayDate={"笑傲江湖","风清扬","令狐冲","岳不群","乔峰","虚竹","段誉","中神通","东邪","西毒","南帝","北丐"}; 

    @Override 

    protected void onCreate(Bundle savedInstanceState) { 

        super.onCreate(savedInstanceState);   

        setContentView(R.layout.activity_arrayadapter);   

        initView();   

    } 

    private void initView() { 

      mListView=(ListView)findViewById(R.id.listView1);   

      //新建一个数组适配器ArrayAdapter绑定数据,参数(当前的Activity,布局文件,数据源) 

      //android.R.layout.simple_list_item_1        本身自带布局   

      ArrayAdapter<string>    adapter=new ArrayAdapter<string   deep="8">(this,   android.R.layout.simple_expandable_list_item_1,arrayDate); 

      //视图(ListView)加载适配器 

      mListView.setAdapter(adapter);   

      mListView.setOnItemClickListener(new OnItemClickListener() { 

    

         @Override 

         public voidonItemClick(AdapterView<!--?-->   parent, View view, 

                int position,long id) { 

              

            Toast.makeText(ArrayAdapterActivity.this,arrayDate[position],1).show();   

              

         }   

      });   

   } 

      

} </string></string>



预览效果:

 

 

2:SimpleAdapter

 

使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。

 

归纳步骤:

 

 

 

1、准备数据源:指定由Map组成的List数据源

 

2、新建适配器,设置键值名和对应控件id,绑定数据

 

3、视图加载适配器

 

参数:

 

new SimpleAdapter(context, data, resource, from, to)

 

context ------SimpleAdapter关联的View的运行环境

 

data ---------一个Map组成的List。在列表中的每个条目对应列表中的一行,每一个map中应该包含所有在from参数中指定的键

 

resource ------ 一个定义列表项的布局文件的资源ID。布局文件将至少应包含那些在to中定义了的ID

 

from ---------- 一个将被添加到Map映射上的键名

 

to  -------------将绑定数据的视图的ID,跟from参数对应

 

代码:

[代码]java代码:

?

01

02

03

04

05

06

07

08

09

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

    /****

     *

     *

     *   SimpleAdapter

     *

     * @author   Administrator

     *

     */ 

    public class    SimpleAdapterActivity extends Activity { 

        

       private ListView mshow_list; 

       String[]   name = { "张三","李四","小星星","静静","明明","小张" }; 

        

       int[]   img = {R.drawable.a2, R.drawable.a3,R.drawable.a4,   R.drawable.a5,R.drawable.a6,R.drawable.ic_launcher}; 

       protected void    onCreate(android.os.Bundle   savedInstanceState) { 

            

          super.onCreate(savedInstanceState);   

          //加载布局文件 

          setContentView(R.layout.activity_simpleadapter);   

          //2.获取listview控件的对象 

          mshow_list=(ListView)findViewById(R.id.show_listview);   

            

          /**  

           *   第四步:定义SimpleAdapter(并加载对应item布局文件,获得对应的keY,获得对应item布局文件中的组件的id

           *  

           *   第二个参数data:数据源  

           *   第三个参数resource   :listView每个item对应的布局文件  

           *   第四个参数   from:

           *   第五个参数to:  

           *new   String[]{对应的key}v

           */ 

          SimpleAdapter   simpleAdapter=new SimpleAdapter(this, get_data(), 

                R.layout.item_simple,new String[]{ 

             "type","age","img"},newint[]{R.id.type_txt,R.id.age_txt,R.id.img});   

            

          //第五步:通过setAdapter将适配器绑定到listView控件 

          mshow_list.setAdapter(simpleAdapter);   

                  

            

            

       };   

        

       /***  

        *   数据源

        *  

        *  

        */ 

       private  ArrayList<map<string, object="">>   get_data() { 

          //   定义一个ArrayList的集合(集合中又封装一个map类型的集合) 

          ArrayList<map<string,   object="">>data_list = new ArrayList<map<string,object>>(); 

          for (int i = 0; i<name.length; i++)="" {="" key,value="" intstring="" map不能new="" map="" map<string,="" object=""> data_map =   newHashMap<string, object="">(); 

             data_map.put("type",   name[i]); 

             data_map.put("age",   i + 10+"岁"); 

             data_map.put("img",   img[i]); 

             //   将map集合添加(封装)到ArrayList集合中 

             data_list.add(data_map);   

        

          }   

          //   返回ArrayList集合 

          returndata_list;   

       

       }   

    } 

</string,></name.length;></map<string,object></map<string,></map<string,>



预览效果:

 



 

3:BaseAdapter

 

步骤

使用BaseAdapter实现复杂的ListView的步骤:

 

1 首先准备好需要显示在LiseView中的数据 ——List

 


2 然后编写2 个XML 文件 第一个文件是ListView控件所在的布局文件 第二个文件是ListVIew中每一个item的布局文件

 


3 创建一个继承自BaseAdapter的类

 


4 为ListView绑定适配器 setAdapter(继承BaseAdapter 类的实例)

 


5 用传统方式来覆写适配器的getView函数和getCount 函数(从参数convertView里映射布局文件,find各个控件填充数据)


6 加入ViewHolder类(定义n个控件的声明)用convertView.setTag(viewHolder)在View和Object之间关联,此目的是节省find多次的时间。

 

 

 

 

代码:

 

Activity.java

[代码]java代码:

?

001

002

003

004

005

006

007

008

009

010

011

012

013

014

015

016

017

018

019

020

021

022

023

024

025

026

027

028

029

030

031

032

033

034

035

036

037

038

039

040

041

042

043

044

045

046

047

048

049

050

051

052

053

054

055

056

057

058

059

060

061

062

063

064

065

066

067

068

069

070

071

072

073

074

075

076

077

078

079

080

081

082

083

084

085

086

087

088

089

090

091

092

093

094

095

096

097

098

099

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

133

134

135

136

137

138

139

140

141

142

143

144

145

/***

 *

 *

 * BaseAdapter

 * @author Administrator

 *

 */ 

public class BaseAdapterActivity   extends Activity   { 

    

   private ListView mbaseshow_listview; 

   private String[] arrayDate={"东方不败","天龙八部","九阴真经","东邪","南帝","北丐"}; 

   private int[] img = {R.drawable.l2, R.drawable.l3,R.drawable.l1,   R.drawable.a5,R.drawable.a6,R.drawable.ic_launcher}; 

   @Override 

   protected void onCreate(Bundle savedInstanceState) { 

      //   TODOAuto-generated method stub 

      super.onCreate(savedInstanceState);   

      // 加载布局 

      setContentView(R.layout.baselistview_layout);   

      mbaseshow_listview   =(ListView) findViewById(R.id.baseshow_listview); 

      initView();   

     

   } 

     

     

     

   private void initView() { 

      //   TODOAuto-generated method stub 

       MyAdapter   myAdapter = new MyAdapter(this,arrayDate,img);   

       //绑定适配器 

        mbaseshow_listview.setAdapter(myAdapter);   

        //刷新适配器 

       myAdapter.notifyDataSetChanged();   

       /**ListView的item点击事件

        *  

        *  

        *AdapterView<!--?-->   arg0:适配器

        *View   arg1:表示当前item的view(视图),通过它可以获取该item中的各个组件  

        *position:当前item的id,  

        *arg3:表示当前的item在listview中相对位置  

        *  

        *  

        **/ 

        mbaseshow_listview.setOnItemClickListener(newOnItemClickListener()   { 

    

         @Override 

         public voidonItemClick(AdapterView<!--?-->   arg0, View arg1, int position, 

                long arg3) { 

            Toast.makeText(BaseAdapterActivity.this,"你点击了"+arrayDate[position],-1000).show();   

              

         }   

      });   

          

        mbaseshow_listview.setOnItemLongClickListener(newOnItemLongClickListener()   { 

    

         @Override 

         public boolean onItemLongClick(AdapterView<!--?--> arg0, View arg1, 

                int position,long arg3) { 

            Toast.makeText(BaseAdapterActivity.this,"执行了长按事件",0 ).show(); 

            return false; 

         }   

      });   

   }   

   

   

BaseAdapter.java 

   

   

public class MyAdapter   extends BaseAdapter   { 

   

   private String[] datas; 

   private LayoutInflater inflater; 

   private int[] imgs; 

   public MyAdapter(Contextcotext, String[] datas,int[]   imgs) { 

      this.datas   = datas; 

       inflater   =LayoutInflater.from(cotext); 

       this.imgs=imgs;   

   } 

    

   /**

    *

    * 返回的item总数量

    *

    */ 

   public intgetCount() { 

      return datas.length; 

   } 

    

   /**

    *

    * item的位置

    *

    */ 

   @Override 

   public Object getItem(int position){ 

      //   TODOAuto-generated method stub 

      return datas[position]; 

   } 

    

   /**

    *

    * 对应每个item里面控件的id

    *

    */ 

   @Override 

   public longgetItemId(int position) { 

      //   TODOAuto-generated method stub 

      return position; 

   } 

    

   @Override 

   public View getView(int position,View convertView, ViewGroup   parent) { 

    

      ViewHolde   viewHolde = null; 

        

      if (null ==convertView) { 

         //   实例化   ViewHolde对象 

    

      viewHolde   = newViewHolde(); 

         convertView   = inflater.inflate( 

                R.layout.item_listview,null);   

         viewHolde.img=(ImageView)convertView.findViewById(R.id.img);   

         viewHolde.mtype_txt   =(TextView) convertView 

                .findViewById(R.id.text);   

           

         convertView.setTag(viewHolde);   

    

      }   

        

      else

         viewHolde   = (ViewHolde)convertView.getTag(); 

      }   

        

      viewHolde.mtype_txt.setText(datas[position]);   

      viewHolde.img.setImageResource(imgs[position]);   

      // 返回item视图   

      returnconvertView;   

    

   } 

    

   class ViewHolde { 

      TextView   mtype_txt; 

      ImageView   img; 

   } 

    

原文链接:http://www.apkbus.com/blog-894741-63320.html

打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP