• android学习日记16--GridView(网格视图)


    一、GridView

    1、简述  

      GridView按照行列来显示图片或文本的一种视图,排列其实有点类似TableLayout布局,

    不过和TableLayout还是差别很大的,倒比较像二维的ListView。位于android.widget包下,常常用来实现类似九宫格的图像。
    实现手法和ListView有点相似,用Apapter把数据绑定到控件上,为容器提供子视图,利用视图的数据和元数据来构建每个子视图自定义Adapter显示。
    如果需要自定义适配器 可以扩展抽象类BaseAdapter。

    2、常用属性和对应方法如下:

    下面用实例化SimpleAdapter和继承抽象类BaseAdapter方法实现下图的例子:


    3、实例化SimpleAdapter实现

     Activity代码:

     1     private GridView gv; 
     2     @Override
     3     protected void onCreate(Bundle savedInstanceState) { 
     4        // TODO Auto-generated method stub 
     5        super.onCreate(savedInstanceState); 
     6        setContentView(R.layout.gridview); 
     7 
     8        //准备要添加的数据条目 
     9        List<Map<String, Object>> items = new ArrayList<Map<String,Object>>(); 
    10        for (int i = 0; i < 9; i++) { 
    11          Map<String, Object> item = new HashMap<String, Object>(); 
    12          item.put("imageItem", R.drawable.ic_launcher);//添加图像资源的ID   
    13          item.put("textItem", "icon" + i);//按序号添加ItemText   
    14          items.add(item); 
    15        } 
    16 
    17       //实例化SimpleAdapter适配器 
    18        SimpleAdapter adapter = new SimpleAdapter(this,  
    19                                                    items,  
    20                                                    R.layout.grid_item,  
    21                                                    new String[]{"imageItem", "textItem"},  
    22                                                    new int[]{R.id.image_item, R.id.text_item}); 
    23 
    24        
    25        //获得GridView实例 
    26        gv = (GridView)findViewById(R.id.mygridview); 
    27        //为GridView设置适配器 
    28        gv.setAdapter(adapter); 
    29 
    30     }

    单个组件XML:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3    android:id="@+id/RelativeLayout1"
     4    android:layout_width="wrap_content"  
     5    android:layout_height="fill_parent"
     6    android:paddingBottom="6dip"
     7    >
     8    <ImageView  
     9       android:id="@+id/image_item"
    10       android:layout_width="wrap_content"
    11       android:layout_height="wrap_content"
    12       android:layout_centerHorizontal="true"
    13       android:src="@drawable/ic_launcher"
    14       />
    15    <TextView  
    16       android:id="@+id/text_item"
    17       android:layout_below="@+id/image_item"
    18       android:layout_height="wrap_content"
    19       android:layout_width="wrap_content"
    20       android:layout_centerHorizontal="true"    
    21       />
    22 </RelativeLayout>

    页面主布局XML:

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     3    android:layout_width="wrap_content"
     4    android:layout_height="wrap_content"
     5    >
     6    <GridView  
     7       android:id="@+id/mygridview"
     8       android:numColumns="3"
     9       android:gravity="center_horizontal"
    10       android:layout_width="wrap_content"
    11       android:layout_height="wrap_content"
    12       android:stretchMode="columnWidth"
    13       />
    14 </LinearLayout>

    4、继承抽象类BaseAdapter实现

    替换成自己GridAdapter代码:

     1 //       //准备要添加的数据条目 
     2 //       List<Map<String, Object>> items = new ArrayList<Map<String,Object>>(); 
     3 //       for (int i = 0; i < 9; i++) { 
     4 //         Map<String, Object> item = new HashMap<String, Object>(); 
     5 //         item.put("imageItem", R.drawable.ic_launcher);//添加图像资源的ID   
     6 //         item.put("textItem", "icon" + i);//按序号添加ItemText   
     7 //         items.add(item); 
     8 //       } 
     9 //
    10 //      //实例化SimpleAdapter适配器 
    11 //       SimpleAdapter adapter = new SimpleAdapter(this,  
    12 //                                                   items,  
    13 //                                                   R.layout.grid_item,  
    14 //                                                   new String[]{"imageItem", "textItem"},  
    15 //                                                   new int[]{R.id.image_item, R.id.text_item}); 
    16 
    17        
    18       List<GridInfo> list = new ArrayList<GridInfo>();  
    19        for (int i = 0; i < 9; i++) { 
    20            list.add(new GridInfo("icon"+i));  
    21        } 
    22        
    23        GridAdapter adapter = new GridAdapter(this);  
    24        adapter.setList(list);

    补上GridAdapter代码:

     1 public class GridAdapter extends BaseAdapter {  
     2       
     3     private class GridHolder {  
     4         ImageView appImage;  
     5         TextView appName;  
     6     }  
     7   
     8     private Context context;  
     9   
    10     private List<GridInfo> list;  
    11     private LayoutInflater mInflater;  
    12   
    13     public GridAdapter(Context c) {  
    14         super();  
    15         this.context = c;  
    16     }  
    17   
    18     public void setList(List<GridInfo> list) {  
    19         this.list = list;  
    20         mInflater = (LayoutInflater) context  
    21                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);  
    22   
    23     }  
    24   
    25     public int getCount() {  
    26         // TODO Auto-generated method stub  
    27         return list.size();  
    28     }  
    29   
    30     @Override  
    31     public Object getItem(int index) {  
    32   
    33         return list.get(index);  
    34     }  
    35   
    36     @Override  
    37     public long getItemId(int index) {  
    38         return index;  
    39     }  
    40   
    41     @Override  
    42     public View getView(int index, View convertView, ViewGroup parent) {  
    43         GridHolder holder;  
    44         if (convertView == null) {     
    45             convertView = mInflater.inflate(R.layout.grid_item, null);     
    46             holder = new GridHolder();  
    47             holder.appImage = (ImageView)convertView.findViewById(R.id.image_item);  
    48             holder.appName = (TextView)convertView.findViewById(R.id.text_item);  
    49             convertView.setTag(holder);     
    50   
    51         }else{  
    52              holder = (GridHolder) convertView.getTag();     
    53   
    54         }  
    55         GridInfo info = list.get(index);  
    56         if (info != null) {     
    57             holder.appName.setText(info.getName());  
    58         }  
    59         return convertView;  
    60     }
    61 
    62 }

    比较麻烦还是重写getView()方法。里面的GridInfo只是普通的JAVA bean类。

  • 相关阅读:
    call/cc 总结 | Scheme
    用call/cc合成所有的控制流结构
    词法作用域 vs 动态作用域
    数论部分第二节:埃拉托斯特尼筛法
    1022: [SHOI2008]小约翰的游戏John【Nim博弈,新生必做的水题】
    C++面向对象作业1
    数论部分第一节:素数与素性测试【详解】
    基数排序与桶排序,计数排序【详解】
    计蒜客:百度的科学计算器(简单)【python神解】
    优质免费在线学习网站【自用】
  • 原文地址:https://www.cnblogs.com/aiguozhe/p/3604006.html
Copyright © 2020-2023  润新知