码迷,mamicode.com
首页 > 其他好文 > 详细

专门用来显示大量数据的视图:AdapterView(1)

时间:2015-09-11 20:50:11      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:

  AdapterView是一种用来展示大量数据的视图对象,AdapterView的内容一般是包含相同格式资源的控件,查阅Android文档知类的定义:

技术分享

  从上可知AdapterView直接继承ViewGroup,间接继承View,因此它是一个系统组件,使用它,一般是直接使用它的子类,它的常见子类有ListView、Spinner,GridView和Gallery。

查看AdapterView源码注意到技术分享,AdapterView类后面跟着泛型技术分享

  

  AdapterView的常用子类介绍:

  1.ListView  视图是一个列表,每一项的布局是一个自定义布局,可以使用系统已定义好的布局,合理的组合数据项的布局,可以展示不同类型的数据。

  2.Spinner  视图是一个下拉列表,每一项的内容只能是字符串数据,类型可以定义为多种类型。

  3.GridView    视图是一个网格,对比ListView来看,ListView是一个多行单列视图,而GridView是一个多行多列视图,它的列数根据实际需求自定义。

  4.Gallery   画廊视图,水平方向滑动,多用于展示图片,是一个可以把子项以中心锁定,水平滚动的列表。已经被ScrollView和ViewPicker取代了。

 

  1.ListView的使用:

  ListView类的定义:

  技术分享

  XML中的常用属性:

  android:layout_width;默认一般设置为match_parent或者fill_parent

  android:layout_height:默认一般设置为match_parent或者fill_parent

  android:layout_weight:根据需要来灵活设置android:layout_width和android:layout_height

  android:divider:设置相邻两个水平项之间的分隔条

  android:dividerHeight:设置相邻两个水平项之间的分隔条的高度

  android:entries:为视图绑定数据源,其中数据源必须是以xml文件定义的

  Java文件中常用方法:

  技术分享

  技术分享

  技术分享

  技术分享

  技术分享

  技术分享

  技术分享

  技术分享

  技术分享

  技术分享

  技术分享

  技术分享

  技术分享

  示例:

  1.数据源是xml文件定义的

技术分享
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <resources>
 3 
 4     <string name="app_name">Day21_My_ListView</string>
 5     <string name="action_settings">Settings</string>
 6     <string name="hello_world">Hello world!</string>
 7 
 8     <string-array name="data">
 9         <item>这是ListView的第一条数据项</item>
10         <item>这是ListView的第二条数据项</item>
11         <item>这是ListView的第三条数据项</item>
12         <item>这是ListView的第四条数据项</item>
13     </string-array>
14 
15 </resources>
strings.xml文件
技术分享
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10 
11     <ListView
12         android:id="@+id/listView"
13         android:layout_width="match_parent"
14         android:layout_height="match_parent"
15         android:entries="@array/data">
16     </ListView>
17 
18 </RelativeLayout>
main_activity.xml文件
技术分享
 1 package com.my.day21_my_listview1;
 2 
 3 import com.my.day21_my_listview1.R;
 4 
 5 import android.os.Bundle;
 6 import android.app.Activity;
 7 
 8 public class MainActivity extends Activity {
 9 
10     @Override
11     protected void onCreate(Bundle savedInstanceState) {
12         super.onCreate(savedInstanceState);
13         setContentView(R.layout.activity_main);
14     }
15 }
Main_Activity

  2.数据源是动态定义的

技术分享
 1 package com.my.day21_my_listview1;
 2 
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 
 6 import com.my.day21_my_listview1.R;
 7 
 8 import android.os.Bundle;
 9 import android.widget.ArrayAdapter;
10 import android.widget.ListView;
11 import android.app.Activity;
12 
13 public class MainActivity extends Activity {
14     private List<String> datas;
15     private ListView listView;
16     private ArrayAdapter<String> adapter;
17     
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_main);
22         
23         datas = new ArrayList<String>();
24         for(int i=1;i<=4;i++){
25             datas.add("这是ListView的第"+i+"条数据项");
26         }
27         listView = (ListView) findViewById(R.id.listView);
28         adapter = new ArrayAdapter<String>(this, android.R.layout.simple_gallery_item, datas);
29         listView.setAdapter(adapter);
30     }
31 }
Main_Activity

  效果图:

技术分享

 

  2.Spinner的使用:

  Spinner的类定义:

技术分享

  描述:

技术分享

  常用方法:

  技术分享

  注:Spinner中的数据也可以以两个方式定义,一种是静态的xml定义,另一种是动态的完成数据源的初始化。

  示例:

  效果图:

  技术分享

  

技术分享
 1 package com.my.day21_my_spinner;
 2 
 3 import android.os.Bundle;
 4 import android.app.Activity;
 5 import android.widget.ArrayAdapter;
 6 import android.widget.Spinner;
 7 
 8 public class MainActivity extends Activity {
 9     private Spinner spinner;
10     private String[] datas = {"北京","上海","广州","深圳"};
11     private ArrayAdapter<String> adapter;
12     
13     @Override
14     protected void onCreate(Bundle savedInstanceState) {
15         super.onCreate(savedInstanceState);
16         setContentView(R.layout.activity_main);
17         
18         spinner = (Spinner) findViewById(R.id.spinner);
19         adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,datas);
20         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
21         spinner.setAdapter(adapter);
22     }
23 
24 }
Main_Activity

 

  3.GridView的使用:

技术分享

  以多行多列的形式显示数据,其中多列是定义的。

  在xml文件中的重要属性:

  技术分享

  示例:

  效果图:

技术分享

 

技术分享
 1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 2     xmlns:tools="http://schemas.android.com/tools"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:paddingBottom="@dimen/activity_vertical_margin"
 6     android:paddingLeft="@dimen/activity_horizontal_margin"
 7     android:paddingRight="@dimen/activity_horizontal_margin"
 8     android:paddingTop="@dimen/activity_vertical_margin"
 9     tools:context=".MainActivity" >
10 
11 
12     <!--
13         android:numColumns:列数
14         android:horizontalSpacing:水平间距(列与列)
15         android:verticalSpacing:垂直间距(行与行)
16         android:columnsWidth:每一列的宽度
17         android:stretchMode:设置剩余的宽度分配方式
18 
19     -->
20 
21     <GridView
22         android:id="@+id/gridView"
23         android:layout_width="match_parent"
24         android:layout_height="match_parent"
25         android:columnWidth="100dp"
26         android:horizontalSpacing="5dp"
27         android:numColumns="3"
28         android:stretchMode="spacingWidthUniform"
29         android:verticalSpacing="5dp" >
30     </GridView>
31 
32 
33 </RelativeLayout>
activity_main
技术分享
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6     
 7     <ImageView
 8         android:id="@+id/imageView"
 9         android:layout_width="60dp"
10         android:layout_height="60dp"
11         android:scaleType="fitXY"
12         android:src="@drawable/ic_launcher"
13         />
14     <TextView
15         android:id="@+id/textView"
16         android:layout_width="wrap_content"
17         android:layout_height="wrap_content"
18         android:text="@string/hello_world"
19         />
20     
21 </LinearLayout>
列表项布局
技术分享
 1 package com.my.day21_my_gridview2;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 
 8 import android.os.Bundle;
 9 import android.app.Activity;
10 import android.widget.GridView;
11 import android.widget.SimpleAdapter;
12 
13 public class MainActivity extends Activity {
14     private GridView gridView;
15 
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20 
21         gridView = (GridView) findViewById(R.id.gridView);
22 
23         int[] images = { R.drawable.sample_0, R.drawable.sample_1,
24                 R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,
25                 R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 };
26 
27         List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
28 
29         for (int i = 0; i < images.length; i++) {
30             Map<String, Object> map = new HashMap<String, Object>();
31             map.put("image", images[i]);
32             map.put("name", "小狗" + i);
33             list.add(map);
34         }
35 
36         SimpleAdapter adapter = new SimpleAdapter(this, list,
37                 R.layout.item_layout, new String[] { "image", "name" },
38                 new int[] { R.id.imageView, R.id.textView });
39 
40         gridView.setAdapter(adapter);
41 
42     }
43 }
Main_Activity

 

  4.Gallery的使用

  Gallery的类定义:

技术分享

  Gallery官方文档解释:

技术分享

  示例:

  效果图:左右滑动,切换图片

  技术分享

  

技术分享
 1 package com.my.day21_my_gallery;
 2 
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7 
 8 
 9 import android.os.Bundle;
10 import android.widget.Gallery;
11 import android.widget.SimpleAdapter;
12 import android.app.Activity;
13 
14 public class MainActivity extends Activity {
15     private List<Map<String, Object>> datas;
16     private SimpleAdapter adapter;
17     private Gallery gallery;
18     private int[] images = { R.drawable.sample_0, R.drawable.sample_1,
19             R.drawable.sample_2, R.drawable.sample_3, R.drawable.sample_4,
20             R.drawable.sample_5, R.drawable.sample_6, R.drawable.sample_7 };
21 
22     List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();    
23     @Override
24     protected void onCreate(Bundle savedInstanceState) {
25         super.onCreate(savedInstanceState);
26         setContentView(R.layout.activity_main);
27         
28         datas = new ArrayList<Map<String,Object>>();
29         for(int i=0;i<images.length;i++){
30             Map<String, Object> map = new HashMap<String, Object>();
31             map.put("image", images[i]);
32             datas.add(map);
33         }
34         
35         gallery = (Gallery) findViewById(R.id.gallery);
36         adapter = new SimpleAdapter(this, datas, R.layout.item_layot, new String[]{"image"}, new int[]{R.id.image});
37         gallery.setAdapter(adapter);
38     }
39 }
Main_Activity

 

  总结:综上所述,对于AdapterView这类视图,使用步骤类似,需要根据不同的场景选择合适的展示数据的视图。

 

  未完,待续。

 

专门用来显示大量数据的视图:AdapterView(1)

标签:

原文地址:http://www.cnblogs.com/enjoy-coding/p/4802039.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!